常见调试指令

查看各个系统组件启动时输出信息

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
文章目录