gbd基本概念
GDB (GNU Debugger) 是一个强大的命令行调试工具,用于调试各种编程语言(如C、C++、Java、Python等)编写的程序。使用 gdb可以帮助开发人员更快地定位和修复程序中的缺陷,提高代码质量和开发效率。它是 Linux/Unix 系统上最常用的调试工具之一。
1. 背景
程序的发布方式有两种,
debug
模式和
release
模式
Linux gcc/g++
出来的二进制程序,默认是
release
模式,不可调试
要使用
gdb
调试,必须在源代码生成二进制程序的时候
,
加上
-
g
选项
可以看到的是,debug
版本的可执行程序test.d
明显比release版本test.r的大。
readelf命令
我们可以通过readelf
指令来查看可执行文件中有没有调试信息。
2. 开始使用
语法:gdb + debug版本文件
退出:
ctrl + d
或
q
调试命令:
list / l 行号:显示 binFile 源代码,接着上次的位置往下列,每次列 10 行。list / l 函数名:列出某个函数的源代码。break/b 行号:在某一行设置断点break/b函数名:在某个函数开头设置断点info break /i b:查看断点信息。delete breakpoints/d :删除所有断点delete breakpoints n/d n:删除序号为 n 的断点disable n:禁用序号为 n 的断点enable n:启用序号为 n 的断点r/run:从开始连续而非单步执行程序c/continue:从当前位置开始连续而非单步执行程序,c用于断点间的跳转n/next:单条执行,n不会进入函数内部,把函数调用看成一个语句执行s/step:进入函数调用finish:执行到当前函数返回,然后停下来等待命令until 行号:跳至n 行p/print 变量名:打印变量或者表达式的值,通过表达式可以修改变量的值或者调用函数display 变量名:跟踪查看一个变量,每次停下来都显示它的值undisplay n :取消对先前设置的编号为n的变量的跟踪set var :修改变量的值breaktrace( 或 bt) :查看各级函数调用及参数info ( i) locals :查看当前栈帧局部变量的值