GDB 簡易入門教程

來源:互聯網
上載者:User

GDB 簡易入門教程

調試 C 程式,曾讓我很困擾。然而當我之前在寫我的作業系統時,我有很多的 Bug 需要調試。我很幸運的使用上了 qemu 模擬器,它允許我將調試器附加到我的作業系統。這個調試器就是 gdb

我得解釋一下,你可以使用 gdb 先做一些小事情,因為我發現初學它的時候真的很混亂。我們接下來會在一個小程式中,設定斷點,查看記憶體。

 

1、 設斷點

如果你曾經使用過調試器,那你可能已經會設定斷點了。

下面是一個我們要調試的程式(雖然沒有任何 Bug):

  1. #include<stdio.h>
  2. void do_thing(){
  3. printf("Hi!\n");
  4. }
  5. int main(){
  6. do_thing();
  7. }

另存新檔 hello.c. 我們可以使用 dbg 調試它,像這樣:

  1. bork@kiwi ~>gcc-g hello.c -o hello
  2. bork@kiwi ~>gdb./hello

以上是帶調試資訊編譯 hello.c(為了 gdb 可以更好工作),並且它會給我們醒目的提示符,就像這樣:

  1. (gdb)

我們可以使用 break 命令設定斷點,然後使用 run 開始偵錯工具。

  1. (gdb)break do_thing
  2. Breakpoint1 at 0x4004f8
  3. (gdb) run
  4. Starting program:/home/bork/hello
  5. Breakpoint1,0x00000000004004f8in do_thing ()

程式暫停在了 do_thing 開始的地方。

我們可以通過 where 查看我們所在的調用棧。

  1. (gdb)where
  2. #0 do_thing () at hello.c:3
  3. #10x08050cdbin main () at hello.c:6
  4. (gdb)

 

2、 閱讀彙編代碼

使用 disassemble 命令,我們可以看到這個函數的彙編代碼。棒級了,這是 x86 彙編代碼。雖然我不是很懂它,但是 callq 這一行是 printf 函數調用。

  1. (gdb) disassemble do_thing
  2. Dump of assembler code forfunction do_thing:
  3. 0x00000000004004f4<+0>: push %rbp
  4. 0x00000000004004f5<+1>: mov %rsp,%rbp
  5. =>0x00000000004004f8<+4>: mov $0x40060c,%edi
  6. 0x00000000004004fd<+9>: callq 0x4003f0
  7. 0x0000000000400502<+14>: pop %rbp
  8. 0x0000000000400503<+15>: retq

你也可以使用 disassemble 的縮寫 disas

 

3、 查看記憶體

當調試我的核心時,我使用 gdb 的主要原因是,以確保記憶體布局是如我所想的那樣。檢查記憶體的命令是 examine,或者使用縮寫 x。我們將使用x

通過閱讀上面的彙編代碼,似乎 0x40060c 可能是我們所要列印的字串地址。我們來試一下。

  1. (gdb) x/s 0x40060c
  2. 0x40060c:"Hi!"

的確是這樣。x/s/s 部分,意思是“把它作為字串展示”。我也可以“展示 10 個字元”,像這樣:

  1. (gdb) x/10c0x40060c
  2. 0x40060c:72'H'105'i'33'!'0'\000'1'\001'27'\033'3'\003'59';'
  3. 0x400614:52'4'0'\000'

你可以看到前四個字元是 Hi!\0,並且它們之後的是一些不相關的東西。

我知道 gdb 很多其他的東西,但是我仍然不是很瞭解它,其中 xbreak 讓我獲得很多。你還可以閱讀 do umentation for examining memory。

使用 GDB 恢複堆棧資訊 

強大的C/C++ 程式調試工具GDB 

Linux GDB調試 詳述

GDB調試命令總結 

GDB調試工具入門 

GDB 的詳細介紹:請點這裡
GDB 的:請點這裡

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.