GDB:
Linux CentOS 上 安装GDB最新版
-
这里使用手动安装,没有用yum install gdb(细节请见: https://yum-info.contradodigital.com/view-package/base/gdb/)
-
先检测系统是否安装过GDB: rpm -qa | grep gdb
-
下载gdb下载地址: https://ftp.gnu.org/gnu/gdb/
-
这里下载gdb-13.2到当前目录:wget https://ftp.gnu.org/gnu/gdb/gdb-13.2.tar.gz
-
解压在当前目录: tar -zxvf gdb-13.2.tar.gz
-
进入gdb-13.2(cd gdb-13.2),执行命令: ./configure
-
当前目录下执行make命令: make
-
当前目录下执行命令: sudo make install
-
将编译好的gdb拷贝到usr/bin下:sudo cp ./gdb/gdb /usr/bin/gdb
-
测试是否成功安装: gdb -v, 输出对应版本信息就是安装成功了。
GDB用法示例
注: gcc -v –help 命令会展示gcc命令的详细参数信息
调试 c/c++程序
-
编译debug版本的可执行文件: gcc -g test.cc,默认会生成一个 a.out文件
-
开始调试这个 a.out 文件: gdb a.out
-
设置开始调试的断点入口函数:b main(实际上就是 break main, 直接用 break main 也行)
-
开始运行 gdb 命令,在当前输入提示符下输入命令: run
-
开始逐行调试:s
-
继续下一行调试: s
其他操作请见示例教程:
https://www.gdbtutorial.com/tutorial/how-use-gdb-example
c/c++反汇编
-
开始调试这个 a.out 文件: gdb a.out
-
设置开始调试的断点入口函数:break main
-
开始运行 gdb 命令,在当前输入提示符下输入命令: run
-
接着执行反汇编命令:disassemble 这个命令成功执行默认输出GAS AT&T格式的汇编代码
Linux gdb反汇编更多详情请见:
https://visualgdb.com/gdbreference/commands/disassemble
附加说明:
-
Windows Visual Studio 中显示反汇编代码的方法:设置断点,debug情况下运行程序,程序在断点等待的时候按下 Ctrl + F11 组合键,就能看到反汇编代码(MASM Intel格式)。菜单操作如下图:
-
debug编译生成的汇编代码没有经过优化,而release编译生成的汇编代码是优化过的, 二者有很大区别。还要注意带调试信息的汇编代码,里面很多逻辑是调试需要而非原来的程序逻辑。
-
gdb中 c++ 调试命令和反汇编相关命令结合使用,可以查看更深入的程序运行信息。
GDB 常用命令
For purpose of this tutorial, we will see few commands which are commonly used.
Command Description
r Start running program until a breakpoint or end of program
b fun Set a breakpoint at the begining of function "fun"
b N Set a breakpoint at line number N of source file currently executing
b file.c:N Set a breakpoint at line number N of file "file.c"
d N Remove breakpoint number N
info break List all breakpoints
c Continues/Resumes running the program until the next breakpoint or end of program
f Runs until the current function is finished
s Runs the next line of the program
s N Runs the next N lines of program
n Like s, but it does not step into functions
p var Prints the current value of the variable "var",for example: p rate
set var=val Assign "val" value to the variable "var"
bt Prints a stack trace
q Quit from gdb
disassemble Disassembles a specified function or a function fragment.
参考:
1. https://www.gdbtutorial.com/tutorial/commands
2. https://visualgdb.com/gdbreference/commands/disassemble