1. 程式人生 > >除錯利器GDB(上)

除錯利器GDB(上)

什麼是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 }