linux系统的gdb调试c++和反汇编

  • Post author:
  • Post category:linux


GDB:


  1. https://www.sourceware.org/gdb/


  2. https://ftp.gnu.org/old-gnu/Manuals/gdb/html_chapter/gdb_13.html

Linux CentOS 上 安装GDB最新版

  1. 这里使用手动安装,没有用yum install gdb(细节请见: https://yum-info.contradodigital.com/view-package/base/gdb/)

  2. 先检测系统是否安装过GDB: rpm -qa | grep gdb

  3. 下载gdb下载地址: https://ftp.gnu.org/gnu/gdb/

  4. 这里下载gdb-13.2到当前目录:wget https://ftp.gnu.org/gnu/gdb/gdb-13.2.tar.gz

  5. 解压在当前目录: tar -zxvf gdb-13.2.tar.gz

  6. 进入gdb-13.2(cd gdb-13.2),执行命令: ./configure

  7. 当前目录下执行make命令: make

  8. 当前目录下执行命令: sudo make install

  9. 将编译好的gdb拷贝到usr/bin下:sudo cp ./gdb/gdb /usr/bin/gdb

  10. 测试是否成功安装: gdb -v, 输出对应版本信息就是安装成功了。


GDB用法示例

注: gcc -v –help 命令会展示gcc命令的详细参数信息

调试 c/c++程序

  1. 编译debug版本的可执行文件: gcc -g test.cc,默认会生成一个 a.out文件

  2. 开始调试这个 a.out 文件: gdb a.out

  3. 设置开始调试的断点入口函数:b main(实际上就是 break main, 直接用 break main 也行)

  4. 开始运行 gdb 命令,在当前输入提示符下输入命令: run

  5. 开始逐行调试:s

  6. 继续下一行调试: s

其他操作请见示例教程:

https://www.gdbtutorial.com/tutorial/how-use-gdb-example

c/c++反汇编

  1. 开始调试这个 a.out 文件: gdb a.out

  2. 设置开始调试的断点入口函数:break main

  3. 开始运行 gdb 命令,在当前输入提示符下输入命令: run

  4. 接着执行反汇编命令:disassemble 这个命令成功执行默认输出GAS AT&T格式的汇编代码

Linux gdb反汇编更多详情请见:

https://visualgdb.com/gdbreference/commands/disassemble

附加说明:

  1. Windows Visual Studio 中显示反汇编代码的方法:设置断点,debug情况下运行程序,程序在断点等待的时候按下 Ctrl + F11 组合键,就能看到反汇编代码(MASM Intel格式)。菜单操作如下图:

  2. debug编译生成的汇编代码没有经过优化,而release编译生成的汇编代码是优化过的, 二者有很大区别。还要注意带调试信息的汇编代码,里面很多逻辑是调试需要而非原来的程序逻辑。

  3. 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



版权声明:本文为vily_lei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。