1、除錯hello,要求編譯時指定了-gstabs選項
2、執行hello
deepfuture-lx@deepfuture-lx-desktop:~/private/mytest$ ./hello
hello,world
abcd
3、用gdb開啟hello
deepfuture-lx@deepfuture-lx-desktop:~/private/mytest$ gdb hello
gnu gdb (gdb) 7.1-ubuntu
license gplv3+: gnu gpl version 3 or later
this is free software: you are free to change and redistribute it.
there is no warranty, to the extent permitted by law. type "show copying"
and "show warranty" for details.
this gdb was configured as "x86_64-linux-gnu".
for bug reporting instructions, please see:
...reading symbols from /home/deepfuture-lx/private/mytest/hello...done.
4、列出源**
(gdb) list
warning: source file is more recent than executable.
1 .section .data#初始化的變數
2 output:
3 .ascii "hello,world\n"
4 #要列印的字串,.data為初始化值的變數。output是標籤,指示字串開始的位置,ascii為資料型別
5 .section .bss#未初始化的變數,由0填充的緩衝區
6 .lcomm num,20
7 #lcomm為本地記憶體區域,即本地彙編外的不能進行訪問。.comm是通用記憶體區域。
8 .section .text#組合語言指令碼
9 .globl _start#啟動入口
10 _start:
(gdb) list
11 movl $4,%eax#呼叫的系統功能,4為write
12 movl $output,%ecx#要列印的字串
13 movl $1,%ebx#檔案描述符,螢幕為1
14 movl $12,%edx#字串長度
15 int $0x80#顯示字串hello,world
16
17 movl $0,%eax
18 movl $num,%edi
19 movl $65,1(%edi)#a 的ascii
20 movl $66,2(%edi)#b 的ascii
5、設定斷點
(gdb) break 17
breakpoint 1 at 0x4000c6: file hello.s, line 17.
6、執行至斷點
(gdb) run
starting program: /home/deepfuture-lx/private/mytest/hello
hello,world
breakpoint 1, _start () at hello.s:17
7、執行下條語句
17 movl $0,%eax
(gdb) next
18 movl $num,%edi
8、顯示所有暫存器的值
(gdb) info registers
rax 0x0 0
rbx 0x1 1
rcx 0x60011c 6291740
rdx 0xc 12
rsi 0x0 0
rdi 0x0 0
rbp 0x0 0x0
rsp 0x7fffffffe2d0 0x7fffffffe2d0
r8 0x0 0
r9 0x0 0
r10 0x0 0
r11 0x0 0
r12 0x0 0
r13 0x0 0
r14 0x0 0
r15 0x0 0
rip 0x4000cb 0x4000cb <_start+27>
eflags 0x202 [ if ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
---type to continue, or q to quit---
gs 0x0 0
(gdb) next
19 movl $65,1(%edi)#a 的ascii
9、按十六進製制格式輸出edi暫存器的值。/x表示16進製制,/d表示10進製,/t表示二進位制
(gdb) print/x $rdi
$3 = 0x600128
10、顯示所有暫存器值
(gdb) info registers
rax 0x0 0
rbx 0x1 1
rcx 0x60011c 6291740
rdx 0xc 12
rsi 0x0 0
rdi 0x600128 6291752
rbp 0x0 0x0
rsp 0x7fffffffe2d0 0x7fffffffe2d0
r8 0x0 0
r9 0x0 0
r10 0x0 0
r11 0x0 0
r12 0x0 0
r13 0x0 0
r14 0x0 0
r15 0x0 0
rip 0x4000d0 0x4000d0 <_start+32>
eflags 0x202 [ if ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
---type to continue, or q to quit---
gs 0x0 0
(gdb) next
20 movl $66,2(%edi)#b 的ascii
11、顯示某個記憶體位置的值,x/nyz,其中n為字段數,y為格式(c為字元,d為10進製,x為16進製制),z為字段長度(b為位元組,n為16位字,w為32位字)
(gdb) next
21 movl $67,3(%edi)#c 的ascii
(gdb) x/3cb &num
0x600128 : 0 '\000' 65 'a' 66 'b'
(gdb) next
22 movl $68,4(%edi)#d 的ascii
(gdb) next
23 movl $10,5(%edi)#\n的ascii
(gdb) next
25 movl $4,%eax#呼叫的系統功能,4為write
(gdb) x/4cb &num
0x600128 : 0 '\000' 65 'a' 66 'b' 67 'c'
12、退出gdb
(gdb)quit
深未來技術原創, 。附件為原始檔和目標檔案,解壓密碼為:deepfuture.iteye.com
Linux gdb除錯總結
進入除錯 1 輸入gdb 檔名 2 輸入gdb file 檔名 l 顯示源 預設顯示main函式所在檔案的源 list 檔名 num 顯示指定檔案指定行附近的源 b breakpoint的簡寫,設定斷點。b 行號 給指定行新增斷點 b 函式名 給指定函式新增斷點 b 檔名 行號 給指定檔案指定行新增...
Linux gdb除錯總結
在windows作業系統下,我們的執行程式有兩個版本。debug開發除錯版本 得到的可執行檔案.exe檔案相對較大,其中包含除錯資訊。且不做任何優化,未開發人員提供強大的應用除錯能力 release發行版本 檔案相對較小,不包含除錯資訊,並進行了各種優化,以期達到 最小和速度最優。為使用者的使用提供...
Linux gdb 除錯模式
linux gdb 除錯 編譯除錯版本的檔案 include g 啟動gdb除錯 若有main 有設定引數則可以在gdb下設定傳遞引數 set args gdb一些命令 1.run 執行整個程式 2.start 開始除錯 3.next n 逐條語句執行 4.step 逐條語句執行,並且嘗試進入函式內...