0
有人可以解釋這個「也打印出你的程序中的關鍵點的特定寄存器的內容(使用p),以表明它正在按預期工作。」? 我試過(GDB)p,但我不斷收到「歷史是空Gdb,如何使用打印?
(GDB)NI
環路0x000106d0()
1:X/I $ PC
0x106d0:致電0x2089c < .mul @ PLT>
0x106d4:MOV%L1,01%
(gdb)p
歷史記錄爲空。
有人可以解釋這個「也打印出你的程序中的關鍵點的特定寄存器的內容(使用p),以表明它正在按預期工作。」? 我試過(GDB)p,但我不斷收到「歷史是空Gdb,如何使用打印?
(GDB)NI
環路0x000106d0()
1:X/I $ PC
0x106d0:致電0x2089c < .mul @ PLT>
0x106d4:MOV%L1,01%
(gdb)p
歷史記錄爲空。
$ gdb -q ./output
(gdb) break main
Breakpoint 1 at 0x400846: file test_lambda.cpp, line 11.
(gdb) run
Starting program: /home/mantosh/practice/notesofprogramming/gcc4.9/output
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, main() at test_lambda.cpp:11
11 foo();
//每當你只需要輸入命令 「P」,它會檢查上次使用的命令 。正如我們 不使用「P」隨時在我們這個特定的程序調試會話,它顯示了 消息「歷史記錄爲空」 //
(gdb) p
The history is empty.
//此命令將給予信息使用 「p」 命令所有寄存器
(gdb) info registers
rax 0x7ffff73a3548 140737341175112
rbx 0x0 0
rcx 0x60 96
rdx 0x7fffffffe1b8 140737488347576
rsi 0x7fffffffe1a8 140737488347560
rdi 0x1 1
rbp 0x7fffffffe0c0 0x7fffffffe0c0
rsp 0x7fffffffe0c0 0x7fffffffe0c0
r8 0x7ffff7dd8240 140737351877184
r9 0x7ffff7dbddb0 140737351769520
r10 0x7fffffffddf0 140737488346608
r11 0x7ffff7023880 140737337505920
r12 0x4006f0 4196080
r13 0x7fffffffe1a0 140737488347552
r14 0x0 0
r15 0x0 0
rip 0x400846 0x400846 <main()+4>
eflags 0x246 [ PF ZF IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
//現在我們可以打印RIP(指令指針)。 在此之後,如果我們 繼續調試我們的程序,我們只需鍵入「p」,它將打印「rip」 ,因爲這是在調試過程中上次在命令「p」中傳遞的參數。
(gdb) p $rip
$1 = (void (*)(void)) 0x400846 <main()+4>
(gdb) step
foo() at test_lambda.cpp:4
4 int x = 10;
(gdb) p
$2 = (void (*)(void)) 0x400846 <main()+4>
(gdb) step
5 int y= 20;
(gdb) p
$3 = (void (*)(void)) 0x400846 <main()+4>
(gdb) n
6 x = x + y;
(gdb) p
$4 = (void (*)(void)) 0x400846 <main()+4>
(gdb) n
7 std::cout<<x<<std::endl;
(gdb) p
$5 = (void (*)(void)) 0x400846 <main()+4>
(gdb) c
Continuing.
30
[Inferior 1 (process 3226) exited normally]
(gdb)