About GDB
GDB, the GNU Project debugger, allows you to see what is going on `inside’ another program while it executes – or what another program was doing at the moment it crashed.
g++相关:https://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html
基本指令:
list/l | 列出源代码(十行) |
---|---|
next/n | 跳过直接执行不进入函数内部(像OD里面的F8) |
step/s | 进入函数体(像OD里面的F7) |
si | 一条一条指令单步的调试 |
backtrace/bt | 查看函数调用的栈帧,可以看到栈帧号 |
info/i | 查看函数局部变量值,一般可写i locals 也可以先bt然后再输入i locals 还可以f [栈帧号]然后i locals看这个函数里面的局部变量值 |
info registers | 可以显示所有寄存器的当前值 |
frame/f [栈帧号] | 可产看其他函数体的局部变量值,配合i locals使用 |
finish | 结束 |
set $var | 修改变量值 |
display $var | 每次停下的时候显示var值,使用undisplay取消 |
break [行号] | 在某行设置断点 i breakpoints 显示断点信息 delete breakpoints [号] 删除断点,不加断点号就是删除所有 disable breakpoints [号] 禁用某个断点,不加断点号就是禁用所有 |
continue | 继续运行 |
run | 执行 |
x | 查看输入 x/7b input表示每个字节一组(b),7表示打印7组 |
watch | 设置观察点 例如watch input[i] 每次运行查看input数组里面i的值 i watch查看设置了哪些断点 |
p | print,p $esp 可以打印寄存器中的值 |
gcc -c 目标文件 | 将.c文件编译成.o文件,也就是目标文件 |
ar rs | 打包静态库,用法ar rs 静态库名 1.o 2.o …ar 命令类似于tar 命令,起一个打包的作用,但是把目标文件打包成静态库只能用ar 命令而不能用tar 命令。选项r 表示将后面的文件列表添加到文件包,如果文件包不存在就创建它,如果文件包中已有同名文件就替换成新的。s 是专用于生成静态库的,表示为静态库创建索引,这个索引被链接器使用。 |
ranlib | ar r 之后,再ranlib 静态库名等同于上面的指令 |
gcc -print-search-dirs | 查看默认目录 |
gcc -c -fPIC *.c | 编译共享库的时候要加上fPIC选项 |
gcc -S main.c | 生成汇编文件 |
gcc -c main.s | 生成目标文件 |
一些注意事项:1.如果某个函数的变量发生越界错误,可能不会立刻发生错误,而是在函数返回时产生段错误