天天看點

【Linux基礎】Gdb基本指令

Gdb 的指令可以通過檢視help 進行查找,由于Gdb 的指令很多,是以Gdb 的help 将其分成了很多種類(class),使用者可以通過進一步檢視相關class找到相應的指令。如下所示: (gdb) help List of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands … Type "help" followed by a class name for a list of commands in that class. Type "help" followed by command name for full documentation. Command name abbreViations are allowed if unambiguous. 上述列出了Gdb 各個分類的指令。接下來可以具體查找各分類種的指令。如下所示: (gdb) help data Examining data. List of commands: call -- Call a function in the program delete display -- Cancel some expressions to be displayed when program stops delete mem -- Delete memory region disable display -- Disable some expressions to be displayed when program stops … Type "help" followed by command name for full documentation. Command name abbreViations are allowed if unambiguous. 至此,若使用者想要查找call指令,就可鍵入“help call”。 (gdb) help call Call a function in the program. The argument is the function name and arguments, in the notation of the current working language. The result is printed and saved in the value history, if it is not void. 當然,若使用者已知指令名,直接鍵入“help [command]”也是可以的。 Gdb 中的指令主要可以分為以下幾類:工作環境相關指令、設定斷點與恢複指令、源代碼檢視指令、檢視運作資料相關指令及修改運作參數指令。以下就分别對這幾類的指令進行講解。 1. 工作環境相關指令 Gdb中不僅可以調試所運作的程式,而且還可以對程式相關的工作環境進行相應的設定,甚至還可以使用shell 中的指令進行相關的操作,其功能極其強大。Gdb的常見工作環境相關指令如表 3‑8所示。

【Linux基礎】Gdb基本指令

01.jpg (52.65 KB, 下載下傳次數: 0)

下載下傳附件 儲存到相冊 設為封面

前天 09:17 上傳

2. 設定斷點與恢複指令 Gdb中設定斷點與恢複的常見指令如表 3‑9所示。

【Linux基礎】Gdb基本指令

02.jpg (90.65 KB, 下載下傳次數: 0)

下載下傳附件 儲存到相冊 設為封面

前天 09:19 上傳

由于設定斷點在Gdb的調試中非常重要,是以在此再着重講解一下Gdb中設定斷點的方法。Gdb 中設定斷點有多種方式:其一是按行設定斷點,設定方法在前面已經指出,在此就不重複了。另外還可以設定函數斷點和條件斷點,在此結合上一小節的代碼,具體介紹後兩種設定斷點的方法。 ① 函數斷點 Gdb 中按函數設定斷點隻需要把函數名列在指令“b”之後,如下所示: (gdb) b sum Breakpoint 1 at 0x80484ba: file test.c, line 16. (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x080484ba in sum at test.c:16 要注意的是,此時的斷點實際是在函數的定義處,也就是在16 行處(注意第16 行還未執行)。 ② 條件斷點 Gdb 中設定條件斷點的格式為:b 行數或函數名if 表達式。具體執行個體如下面所示: (gdb) b 8 if i==10 Breakpoint 1 at 0x804848c: file test.c, line 8. (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x0804848c in main at test.c:8 stop only if i == 10 (gdb) r Starting program: /home/yul/test The sum of 1-m is 1275 Breakpoint 1, main () at test.c:9 9 n += i; (gdb) p i $1 = 10 可以看到,該例中在第8行(也就是運作完第7行的for循環)設定了一個“i==0”的條件斷點,在程式運作之後可以看出,程式确實在i為10的時候暫停運作。 3. Gdb中源碼檢視相關指令 在Gdb中可以檢視源碼以友善其他操作,它的常見相關指令如表 3‑10所示。

【Linux基礎】Gdb基本指令

03.jpg (43.92 KB, 下載下傳次數: 0)

下載下傳附件 儲存到相冊 設為封面

前天 09:21 上傳

4. Gdb 中檢視運作資料相關指令 Gdb 中檢視運作資料是指當程式處于“運作”或“暫停”狀态時,可以檢視的變量及表達式的資訊,其常見指令如表 3‑11所示:

【Linux基礎】Gdb基本指令

04.jpg (38.09 KB, 下載下傳次數: 0)

下載下傳附件 儲存到相冊 設為封面

前天 09:23 上傳

5. Gdb 中修改運作參數相關指令 Gdb 還可以修改運作時的參數,并使該變量按照使用者目前輸入值繼續運作。它的設定方式為:在單步執行的過程中,鍵入指令“set 變量=設定值”。這樣,在此之後,程式就會按照該設定的值運作了。下面,筆者結合上一節的代碼将n的初始值設為4,其代碼如下所示: (Gdb) b 7 Breakpoint 5 at 0x804847a: file test.c, line 7. (Gdb) r Starting program: /home/yul/test The sum of 1-m is 1275 Breakpoint 5, main () at test.c:7 7 for(i=1; i<=50; i++) (Gdb) set n=4 (Gdb) c Continuing. The sum of 1-50 is 1279 Program exited with code 031. 可以看到,最後的運作結果的确比之前的值大了4。 Gdb的使用切記點: 在Gcc編譯選項中一定要加入“-g”。 隻有在代碼處于“運作”或“暫停”狀态時才能檢視變量值。 設定斷點後程式在指定行之前停止。 本文轉載于唯C教育,【Linux基礎】Gdb基本指令

http://www.weicedu.com/forum.php?mod=viewthread&tid=59&fromuid=4

(出處: http://www.weicedu.com/)

繼續閱讀