软件调试、GDB等指令整理
常见调试指令
查看各个系统组件启动时输出信息
dmesg | grep SIG
用GDB单步调试进程
./gdb bin/xx/JFZImpl
(gdb)set args ARG1 ATG2
(gdb)run
(gdb)bt
(gdb)f 8 (显示第8行)
(gdb)i locals (显示局部变量)
(gdb)p g_userId (显示全局变量)
(gdb)p m_Obj
(gdb)set print pretty on (美化显示)
(gdb)quit
参考:https://zhuanlan.zhihu.com/p/680065737
https://blog.csdn.net/qq_41839588/article/details/130236028
指令汇总:
-g: 使用该参数编译可以执行文件,得到调试表。
gdb ./a.out
list: list 1 列出源码。根据源码指定 行号设置断点。
b: b 20 在 20 行位置设置断点。
run/r: 运行程序
n/next: 下一条指令(会越过函数)
s/step: 下一条指令(会进入函数)
p/print: p i 查看变量的值。
continue:继续执行断点后续指令。
finish:结束当前函数调用。
quit:退出 gdb 当前调试。
run:使用 run 查找段错误出现位置。
set args: 设置 main 函数命令行参数 (在 start、 run 之前)
run 字串 1 字串 2 ...: 设置 main 函数命令行参数
info b: 查看断点信息表
b 20 if i = 5: 设置条件断点。
ptype:查看变量类型。
bt:列出当前程序正存活着的栈帧。
frame: 根据栈帧编号,切换栈帧。
display:设置跟踪变量
undisplay:取消设置跟踪变量。 使用跟踪变量的编号
用GDB看coredump文件
1.在Linux下,当程序崩溃时,会生成一个core文件,其中包含了程序崩溃时的内存状态信息。可以使用gdb调试器来分析core文件,定位到崩溃的代码位置。
具体步骤如下:
确认程序已经开启core dump功能。可以使用ulimit命令查看:
ulimit -a
如果core file size为0,则需要设置core dump大小:
ulimit -c unlimited
运行程序,让它崩溃,生成core文件。
另外,还需要确认程序是否被设置为不生成core文件。可以使用以下命令查看:
cat /proc/sys/kernel/core_pattern
如果输出为空或者为“|/usr/share/apport/apport %p %s %c %d %P %E”,则表示程序被设置为不生成core文件。可以使用以下命令修改:
echo "core.%e.%p" > /proc/sys/kernel/core_pattern
修改后,再次运行程序,让它崩溃,就可以生成core文件了。
使用gdb调试器打开core文件:
gdb <程序名> <core文件名>
使用bt命令查看调用栈信息,找到崩溃的位置:
bt
如果需要查看具体代码,可以使用list命令:
list <行号>
如果需要查看变量的值,可以使用print命令:
print <变量名>
通过以上步骤,可以定位到崩溃的代码位置,并进行调试。
参考:https://blog.csdn.net/qq_62783912/article/details/130566836
cd /var/lib/systemd/coredump/
dump拷贝到程序运行目录,解压:
xz -d corefile.xz
运行gdb: gdb
在gdb中加载coredump文件:
core-file corefile
gdb bin/xxx/xxxImpl coredumpfile
如果没显示,运行bt指令
gdbserver使用
以ninja为例,编译指令:./configure.py --bootstrap
如果编译Debug版本,使用编译指令:./configure.py --bootstrap --debug
之后就可以使用GDB进行调试了:
apt-get install -y gdb
gdbserver :5000 ./ninja
GDB常用指令:
gdb ./ninja
target remote 127.0.0.1:5000
list
break main
continue
quit
CLion配置:
Target remote args: tcp:127.0.0.1:5000
Symbol file: ninja
https://www.jetbrains.com/help/clion/remote-debug.html
https://blog.csdn.net/Jony_T/article/details/120463462
https://www.jianshu.com/p/76ae75688079
https://www.cnblogs.com/cc1784380709/p/14341136.html
GDB脚本
gdb -x 1.txt ./bin/jfzImpl
1.txt:
define aa
set var errId = 1
continue
end
tbreak a.cpp:11
commands
aa
end
- 上一篇: 电脑DIY相关硬件配件品牌推荐
- 下一篇: Protobuf数据结构可视化工具