#include <stdio.h>
void fun1(void)
{
int i = 0;
i++;
i = i * 2;
printf("%d\n", i);
}
void fun2(void)
{
int j = 0;
fun1();
j++;
j = j * 2;
printf("%d\n", j);
}
int main(void)
{
fun2();
return 0;
}
使用gdb圖形化調試界面時,可以使用“layout regs
”命令顯示寄存器窗口。以調試上面程序為例:
┌──Register group: general─────────────────────────────────────────────────────────────────────────┐
│rax 0x34e4590f60 227169341280 rbx 0x0 0 │
│rcx 0x0 0 rdx 0x7fffffffe4b8 140737488348344 │
│rsi 0x7fffffffe4a8 140737488348328 rdi 0x1 1 │
│rbp 0x7fffffffe3c0 0x7fffffffe3c0 rsp 0x7fffffffe3c0 0x7fffffffe3c0 │
│r8 0x34e458f300 227169334016 r9 0x34e3a0e9f0 227157273072 │
│r10 0x7fffffffe210 140737488347664 r11 0x34e421ec20 227165727776 │
│r12 0x4003e0 4195296 r13 0x7fffffffe4a0 140737488348320 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
│17 j++; │
│18 j = j * 2; │
│19 printf("%d\n", j); │
│20 } │
│21 │
│22 int main(void) │
│23 { │
>│24 fun2(); │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
native process 12552 In: main Line: 24 PC: 0x40052b
Reading symbols from a...done.
(gdb) start
Temporary breakpoint 1 at 0x40052b: file a.c, line 24.
Starting program: /home/nan/a
Temporary breakpoint 1, main () at a.c:24
(gdb)
可以看到,顯示了通用寄存器的內容。
如果想查看浮點寄存器,可以使用“tui reg float
”命令:
┌──Register group: float───────────────────────────────────────────────────────────────────────────┐
│st0 0 (raw 0x00000000000000000000) │
│st1 0 (raw 0x00000000000000000000) │
│st2 0 (raw 0x00000000000000000000) │
│st3 0 (raw 0x00000000000000000000) │
│st4 0 (raw 0x00000000000000000000) │
│st5 0 (raw 0x00000000000000000000) │
│st6 0 (raw 0x00000000000000000000) │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
│16 fun1(); │
│17 j++; │
│18 j = j * 2; │
│19 printf("%d\n", j); │
│20 } │
│21 │
│22 int main(void) │
│23 { │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
native process 12552 In: main Line: 24 PC: 0x40052b
Temporary breakpoint 1 at 0x40052b: file a.c, line 24.
Starting program: /home/nan/a
Temporary breakpoint 1, main () at a.c:24
(gdb) tui reg float
“tui reg system
”命令顯示系統寄存器:
┌──Register group: system──────────────────────────────────────────────────────────────────────────┐
│orig_rax 0xffffffffffffffff -1 │
│ │
│ │
│ │
│ │
│ │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
│16 fun1(); │
│17 j++; │
│18 j = j * 2; │
│19 printf("%d\n", j); │
│20 } │
│21 │
│22 int main(void) │
│23 { │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
native process 12552 In: main Line: 24 PC: 0x40052b
Temporary breakpoint 1, main () at a.c:24
(gdb) tui reg system
(gdb)
想切換回顯示通用寄存器內容,可以使用“tui reg general
”命令:
┌──Register group: general─────────────────────────────────────────────────────────────────────────┐
│rax 0x34e4590f60 227169341280 rbx 0x0 0 │
│rcx 0x0 0 rdx 0x7fffffffe4b8 140737488348344 │
│rsi 0x7fffffffe4a8 140737488348328 rdi 0x1 1 │
│rbp 0x7fffffffe3c0 0x7fffffffe3c0 rsp 0x7fffffffe3c0 0x7fffffffe3c0 │
│r8 0x34e458f300 227169334016 r9 0x34e3a0e9f0 227157273072 │
│r10 0x7fffffffe210 140737488347664 r11 0x34e421ec20 227165727776 │
│r12 0x4003e0 4195296 r13 0x7fffffffe4a0 140737488348320 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
│16 fun1(); │
│17 j++; │
│18 j = j * 2; │
│19 printf("%d\n", j); │
│20 } │
│21 │
│22 int main(void) │
│23 { │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
native process 12552 In: main Line: 24 PC: 0x40052b
(gdb) tui reg general
(gdb)
參見gdb手冊.
nanxiao