推薦大家好,我叫鄭正。我最近沒有時間輸出文章。
這個周末見。這次,我分享了年輕時有關(guān)調(diào)試段錯誤的文章。
我最近遇到了這些東西,所以我必須學習如何使用gdb。首先標記它。
以下是原始內(nèi)容:前言使用gdb調(diào)試程序應該被視為Linux開發(fā)的一項基本技能。今天,讓我們看一下如何使用gdb調(diào)試分段錯誤。
如何調(diào)試段錯誤首先請看以下示例:#include& lt; stdio.h& gt; #include& lt; stdlib.h& gt; int main(int argc,char ** argv){char * buf; buf = malloc(1& lt;< 31); fgets(buf,1024,stdin); printf(“%s " buf); return 1;}然后在編譯和執(zhí)行過程中出現(xiàn)了分段錯誤。然后讓我們使用gdb來解決問題嗎?我們重新編譯程序,但是在編譯時需要添加-g。
使用gdb進行調(diào)試時,請使用此選項進行編譯。下一步是使用gdb進行調(diào)試!執(zhí)行g(shù)db測試,然后使用run啟動程序。
我們從操作系統(tǒng)收到了SIGSEGV信號,這意味著我們正在嘗試訪問非法部分。我們使用backtrace查看堆棧情況:我們主要查看程序,該程序提示我們在第10行崩潰!那就是fgets(buf,1024,stdin);為什么它在fgets中崩潰,它一定是我們給的參數(shù)了!有問題!讓我們使用print來打印buf的值。
哈哈!空指針........這意味著malloc失敗了!讓我們中斷進行調(diào)試。首先使用kill停止,然后在第8行中斷。
單擊以查看清楚,打破這一點的方法在C文件上:break test.c:8然后運行在第8行停止。我們打印buf值,然后發(fā)現(xiàn)在執(zhí)行malloc之前和之后,它是0x0,當然存在。
那時,在malloc之前可能有一個隨機值。這已經(jīng)表明malloc尚未成功!實際上,主要原因是我們分配的空間太大,并且分配的空間約為4G。
可以更改為1024!總而言之,最主要的是告訴所有人。一些基本的故障排除方法,gdb非常通用,可以檢查信息。
gdb在應用程序開發(fā)中仍然更常用,您仍然需要掌握它!猜猜您喜歡錯誤而無法解決錯誤?使用日志方法從MCU工程師的角度來看嵌入式Linux,您的微控制器的裸機程序框架是什么?
這個周末見。這次,我分享了年輕時有關(guān)調(diào)試段錯誤的文章。
我最近遇到了這些東西,所以我必須學習如何使用gdb。首先標記它。
以下是原始內(nèi)容:前言使用gdb調(diào)試程序應該被視為Linux開發(fā)的一項基本技能。今天,讓我們看一下如何使用gdb調(diào)試分段錯誤。
如何調(diào)試段錯誤首先請看以下示例:#include& lt; stdio.h& gt; #include& lt; stdlib.h& gt; int main(int argc,char ** argv){char * buf; buf = malloc(1& lt;< 31); fgets(buf,1024,stdin); printf(“%s " buf); return 1;}然后在編譯和執(zhí)行過程中出現(xiàn)了分段錯誤。然后讓我們使用gdb來解決問題嗎?我們重新編譯程序,但是在編譯時需要添加-g。
使用gdb進行調(diào)試時,請使用此選項進行編譯。下一步是使用gdb進行調(diào)試!執(zhí)行g(shù)db測試,然后使用run啟動程序。
我們從操作系統(tǒng)收到了SIGSEGV信號,這意味著我們正在嘗試訪問非法部分。我們使用backtrace查看堆棧情況:我們主要查看程序,該程序提示我們在第10行崩潰!那就是fgets(buf,1024,stdin);為什么它在fgets中崩潰,它一定是我們給的參數(shù)了!有問題!讓我們使用print來打印buf的值。
哈哈!空指針........這意味著malloc失敗了!讓我們中斷進行調(diào)試。首先使用kill停止,然后在第8行中斷。
單擊以查看清楚,打破這一點的方法在C文件上:break test.c:8然后運行在第8行停止。我們打印buf值,然后發(fā)現(xiàn)在執(zhí)行malloc之前和之后,它是0x0,當然存在。
那時,在malloc之前可能有一個隨機值。這已經(jīng)表明malloc尚未成功!實際上,主要原因是我們分配的空間太大,并且分配的空間約為4G。
可以更改為1024!總而言之,最主要的是告訴所有人。一些基本的故障排除方法,gdb非常通用,可以檢查信息。
gdb在應用程序開發(fā)中仍然更常用,您仍然需要掌握它!猜猜您喜歡錯誤而無法解決錯誤?使用日志方法從MCU工程師的角度來看嵌入式Linux,您的微控制器的裸機程序框架是什么?