在程序開發(fā)時,時常會遇到異常報錯的情況。有時因為環(huán)境因素,通過調(diào)試工具很難在調(diào)試時復現(xiàn)故障情況,或者很難在短時間內(nèi)復現(xiàn)故障情況。隨著工程代碼量的增加,定位程序出錯位置變得更加困難。
在使用基于WINCE平臺的英創(chuàng)系列工控主板進行應用程序開發(fā)時,當程序產(chǎn)生異常退出,CE操作系統(tǒng)將通過調(diào)試串口打印類似如下錯誤信息。根據(jù)這些信息,結(jié)合應用程序?qū)膍ap文件,就能夠快速定位程序異常的位置,本文將詳細介紹這一方法。
準備工作
以一個簡單的控制臺程序test_exception.exe為例,模擬會產(chǎn)生異常的程序,代碼如下。
#include 'stdafx.h'
#include 'windows.h'
#include 'commctrl.h'
void testErr(char* pbuf, int len)
{
*(pbuf+len) = len;
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i;
char* p = 0;
char buf[10];
for (i=0; i< 10;i++)
{
printf('i=%d\n',i);
testErr(buf, i);
Sleep(1000);
}
printf('test err\n');
Sleep(1000);
testErr(p, 10);
for (;;)
{
printf('.');
Sleep(1000);
}
return 0;
}
這段代碼有個非常明顯的致命錯誤,char* p = 0;實際上是定義的是p的地址為0,之后testErr(p, 10);函數(shù)對p地址的操作會造成指針越界,程序?qū)a(chǎn)生異常結(jié)束。
設置工程屬性
首先需要設置工程屬性,讓工程編譯時產(chǎn)生MAP文件。
另外還可以選擇添加匯編輸出信息。
這樣我們在重新編譯程序后,就可以在編譯目錄里找到源文件的.map和.cod兩種調(diào)試輔助文件。
記錄DEBUG信息
連接英創(chuàng)主板的調(diào)試串口至PC主機的串口,打開串口工具(英創(chuàng)主板默認的調(diào)試串口參數(shù)為115200,8-N-1),以監(jiān)聽DEBUG口打印信息。
運行test_exception程序,記錄DEBUG口打印的異常信息。
主要記錄出錯的exe(或者dll)名test_exception.exe,PC地址00011024,和RA地址000110bc。
查看map文件
查找PC地址00011024,和RA地址000110bc附近的信息。
對照PC地址能夠知道,testErr函數(shù)的地址00011000,這個函數(shù)地址偏移00011024-00011000的地方出錯了。
對照RA地址能夠知道,最后一次調(diào)用該函數(shù)未出錯時的位置,在wmain函數(shù)地址偏移000110bc -00011034的地方。
這樣,我們不但知道了是哪個函數(shù)出的錯,也知道了在哪里調(diào)用出的錯。
查看cod文件
為了進一步確定范圍,打開編譯目錄下對應的cod文件test_exception.cod。
查看testErr函數(shù)信息,可以知道,在偏移地址00011024-00011000=00024的地方的匯編,以及出錯的C代碼,為test_exception.cpp第10行的*(pbuf+len) = len;
查看wmain函數(shù)信息,可以知道,返回地址000110bc -00011034=00088,最后一次正常調(diào)用testErr的地方是在test_exception.cpp第22行。
定位錯誤
這樣稍加分析,我們就可以確定出錯位置了。
最后,可以在代碼附近添加打印或日志log記錄,來驗證異常位置判斷是否正確。
需要例程可以聯(lián)系英創(chuàng)工程師。
如果產(chǎn)生異常提示信息的不是用戶程序,而是'coredll.dll',則判定為是驅(qū)動出錯,請聯(lián)系英創(chuàng)工程師檢查出錯原因。
-
WINDOWS
+關注
關注
4文章
3594瀏覽量
90613 -
嵌入式主板
+關注
關注
7文章
6094瀏覽量
36056
發(fā)布評論請先 登錄
相關推薦
龍芯中科榮獲2024年度信息技術(shù)應用創(chuàng)新工作委員會卓越貢獻成員單位
芯盛智能榮獲2024年信息技術(shù)應用創(chuàng)新工作委員會卓越貢獻成員單位
云酷藍牙人員定位系統(tǒng)的優(yōu)勢

人員定位管理系統(tǒng)用到技術(shù)都有哪些?
飛騰助力首屆教育信息技術(shù)應用創(chuàng)新大賽圓滿落幕
有方科技參編的信息技術(shù)團體標準發(fā)布
龍芯中科助力2024首屆教育信息技術(shù)應用創(chuàng)新大賽成功舉辦
拓維信息參與牽頭組建!長沙新一代信息技術(shù)產(chǎn)教聯(lián)合體正式獲批

中科創(chuàng)達榮獲2024年軟件和信息技術(shù)服務優(yōu)秀企業(yè)
信息集成系統(tǒng):打造智慧化的數(shù)字化平臺
梯度科技入選2023年信息技術(shù)應用創(chuàng)新解決方案名單
智慧工廠藍牙人員定位系統(tǒng)功能

鴻蒙原生應用元服務開發(fā)-位置服務獲取設備信息開發(fā)
翼輝信息入選2023年信息技術(shù)應用創(chuàng)新解決方案名單

評論