gdb简单使用
gdb常见指令
1.编译
假设文件名为hello.c
gcc -ggdb3 -Wall -o hello hello.c
- 调试,需要在编译时加上选项
-ggdb3
选项 -Wall
: 可以提示错误信息
2.进入gdb
gdb hello
3. 打断点,以源码内行号为单位
打断点:
break 21 在第21行设置断点
break main 在main函数处设置断点
break test 在函数test处设置断点
代码单步执行:
next: 跳过函数调用
step: 跳入函数调用
汇编指令单步执行:
si: 汇编指令级别step
ni: 汇编指令级别next
查看寄存器:
layout regs
info regs
查看栈信息
x/10x $sp :打印stack前10个元素
打印寄存器信息
display $register name
display $rip
程序栈参数:
layout args
info registers
程序栈信息:
info frame
查看汇编:
layout asm
disassemble
常用寄存器
%rax
:通常存储函数调用的返回结果,也被用在idiv
(除法)和imul
(乘法)命令中。%rsp
:指向栈顶位置。pop操作通过增大rsp的值实现出栈,push操作通过减小rsp的值实现入栈。%rbp
:栈帧指针,标识当前栈帧的起始位置。%rdi, %rsi, %rdx, %rcx,%r8, %r9
:六个寄存器用于存放函数调用时的参数,当参数少于7个时, 参数放入寄存器;7个以上时,放入栈中%eax
:要返回的值必须存储在%eax
中(规定)