IAR靜態代碼分析工具

前言

IAR集成了C-STAT靜態分析工具,主要通過對源代碼等級進行分析來發現代碼中的潛在問題,除了提高代碼質量外,還有助於提高代碼的規範
如有異議,請指正

主要特點

  • C/C++代碼分析
  • 檢查是否符合MISRA C:2004,MISRA C++:2008和MISRA C:2012定義的規則
  • 大約有250個檢查映射到CWE和CERT C/C++涵蓋的數百個問題
  • 可靈活的設置規則,與詳細的錯誤信息

規則配置

1. 右鍵工程option
在這裏插入圖片描述

2. 選擇Static Analysis配置欄,工具自身的需求進行設置,一般使用默認即可
在這裏插入圖片描述

執行分析

右鍵工程選擇工程分析
在這裏插入圖片描述

  • 編譯欄會彈出C-STAT Messages顯示代碼分析的結果
    在這裏插入圖片描述

  • 根據上圖顯示,提示指針completion存在爲空的風險,雙擊跳轉,查看下源碼

void rt_completion_init(struct rt_completion *completion)
{
    rt_base_t level;
    

    level = rt_hw_interrupt_disable();
    completion->flag = RT_UNCOMPLETED;
    rt_list_init(&completion->suspended_list);
    rt_hw_interrupt_enable(level);
}
  • 源碼中,形參completion如果傳遞進來的是空指針,那麼調用completion->flag將會引起系統非法訪問
    優化方案:增加指針的非空判斷
void rt_completion_init(struct rt_completion *completion)
{
    rt_base_t level;
    
    if(completion == NULL)return;//判斷指針是否爲空
    level = rt_hw_interrupt_disable();
    completion->flag = RT_UNCOMPLETED;
    rt_list_init(&completion->suspended_list);
    rt_hw_interrupt_enable(level);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章