debug —— list调试命令
就以函數之間傳遞值(嵌套函數),的函數來理解debug調試中的,list命令。
1、test.c源碼
1 #include<stdio.h>2 int aaa(int *a){3 int b = 4;4 (*a) = b;5 printf("aaa:a=%d\n",*a);6 printf("aaa:a==%p\n",&(*a));7 return 0;8 }9 int bbb(int *total){10 aaa(total);11 printf("bbb:total=%d\n",*total);12 printf("bbb:total=%p\n",total);13 return 0;14 }15 int ddd(void *other){16 int total = 0;17 bbb(&total);18 printf("ddd:total=%d\n",total);19 printf("ddd:total=%p\n",&total);20 }21 int ccc(){22 int total = 0;23 char other[512] = {'\0'};24 25 bbb(&total);26 printf("ccc:total=%d\n",total);27 printf("ccc:total=%p\n",&total);28 ddd(other);29 }30 int main(){31 ccc();32 return 0;33 }2、把.c文件編譯為可執行文件
如果不編譯使用gdb ./a.out執行會有,No symbol table is loaded. ?Use the "file" command. 的錯誤出現。?
3、gdb調試 啟動命令
4、list 或者? l命令
【1】help l 或者 help list
列出指定的函數或行。 沒有參數,在前面的列表之后或前后再列出10行。 “list-”列出前10行列表之前的10行。 一個參數指定一行,并在該行周圍列出十行。 指定要列出的起始行和結束行之間帶有逗號的兩個參數。 可以通過以下方式指定行:LINENUM,在當前文件中圍繞該行列出,文件:LINENUM,在該文件函數中圍繞該行列出,在該函數的開頭處列出文件:函數,區分類似名稱的靜態函數。*地址,在包含該地址的行周圍列出。 對于兩個arg,如果其中一個為空,則表示與另一個arg相距10行。【2】(gdb) l? ?《或者》? (gdb) list? 《或者》 (gdb)? 空格? ? ? ?===》列出源碼
{會跟前一句的執行結果有關,例如你上一次查看到第10行,執行list命令之后會顯示11-20行}
【3】(gdb) l? ?數字? ? ?===》列出以該數字為中心,包含該局在內的,前后10行代碼。
{例如:如果 l 10,顯示5-14行;? ? 如果? ?l? 2, 前不夠5行,則顯示1-10,盡可能多的顯示}
【4】(gdb) l? ?-? ? ===》列出上一個l命令查看代碼之前的10行。
{例如:如果上一個命令 l 15,顯示10-19行;? ? 則l - 之后顯示1-9行,不夠10行了。}
【5】(gdb) l? ?數字1 , 數字?2? ===》列出列出數字1,數字2之間的代碼
{例如:l? 20,24}
【6】(gdb) l? ?函數名? ===》查看該函數周圍的10行代碼
{例如:l? aaa? 注意:函數名后不需要加括號,否則會報錯 function "aaa()" not defined}
【7】(gdb) l? ?文件名:數字? ===》在文件函數中圍繞該行列出,從函數的開頭列出
{例如:l? test.c:22? 注意:文件名}
【8】(gdb) l? ?文件名:函數名? ===》在該文件中,圍繞該函數名,列出周圍10行代碼
{例如:l? test.c:bbb? ???注意:文件名:函數名}
?
總結
以上是生活随笔為你收集整理的debug —— list调试命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware10 —— 安装CentOS
- 下一篇: debug —— set args调试命