除錯利器GDB(上)
阿新 • • 發佈:2018-11-09
什麼是GDB:
GDB應用:
靜態分析工具與動態分析工具:
GDB啟動方式:
GDB啟動之後會有一個互動式的命令列,可以輸入GDB特定的命令讓GDB去工作。
gdb test.out意思是這一次gdb啟動關注的是test.out這個程序。
gdb test.out core意思是程式崩潰時產生core檔案。
動態連線:
gdb test.out pid意思是gdb去跟蹤test.out這個程式檔案對應的程序號為pid的程序。
應用示例一:
應用示例二:
實驗:
test.c程式如下:
1 #include <stdio.h> 2 #include <unistd.h> 3 4 extern int* g_pointer; 5 extern void func(); 6 7 void test_1() 8 { 9 printf("test_1() : %p\n", test_1); 10 } 11 12 void test_2() 13 { 14 printf("test_2() : %p\n", test_2); 15 } 16 17 void test_3() 18 { 19 printf("test_3() : %p\n", test_3); 20 } 21 22 int main(int argc, char *argv[]) 23 { 24 typedef void(TFunc)(); 25 TFunc* fa[] = {test_1, test_2, test_3}; 26 int i = 0; 27 28 printf("main() : begin...\n"); 29 30 for(i=0; i<argc; i++) 31 { 32 printf("argv[%d] = %s\n", i, argv[i]);33 } 34 35 for(i=0; i<100; i++) 36 { 37 fa[i%3](); 38 sleep(argc > 1); 39 } 40 41 printf("g_pointer = %p\n", g_pointer); 42 43 func(); 44 45 printf("main() : end...\n"); 46 47 return 0; 48 }
func.c如下:
1 #include <stdio.h> 2 3 int* g_pointer; 4 5 void func() 6 { 7 *g_pointer = (int)"D.T.Software"; 8 9 return; 10 }