1.GDB 调试的应用场景
前提:在编译时加入-g选项,把调试信息加到可执行文件中,例如g++ -g hello.cpp –o hello或是在CMakeLists.txt文件的编译参数中加入-g,常见的应用如下:
gdb <program>
program也就是你的执行文件,一般在当前目录下gdb <program> core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。-
gdb <program> <PID>
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索到。
参见:https://www.cnblogs.com/chaoyazhisi/p/5396096.html,本文暂不讨论此应用作者:analanxingde
链接:https://www.jianshu.com/p/577241d6c652
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
1.1 调试binary --- 可执行文件
binary文件必须以debug形式编译,cmake -DCMAKE_BUILD_TYPE=Debug ..
gdb ./test(可执行文件)后进入gdb模式,常见命令如下:
设置断点:
b function(在function函数入口处设置断点)
b number(在第number行设置断点)
b (在当前行设置断点)
layout 多窗口查看相应信息:https://blog.csdn.net/zhangjs0322/article/details/10152279
layout src 查看源码
layout reg:查看寄存器信息
单步(finish跳出):
n (next)下一步,逐过程 n 3 下行三步
s (step)进函数,逐步
c 直接跳到下一个断点处
run 运行程序
p (print) 变量名/地址
bt 或者where ( 查看当前函数堆栈)
quit 退出gdb模式
调试带参数的程序:
gdb binary进入gdb模式后,set args -i input.txt -o output.txt 然后输入r,如果想在
某处中段则b number或者函数,然后输入r 即可执行
如果有输入参数,例如cat input.data | ./test -c business.ini -t default -v 123
[1] set args -c business.ini -t default -v 123 < input.data
[2] gdb test --> r -c business.int -t default -v 123 < input.data
2. core调试
gdb data_center_consumer core文件
根据打出的core日志定位:addr2line -e ./data_center_consumer -i 0x5ab35f