Keen的博客

记录所思、所想、所遇

欢迎来到我的个人站~


【调试技术】gdb调试

1. 准备工作

# 查看coredump路径。若命令产生的coredump是由apport接管,则crash存在于/var/crash目录
cat /proc/sys/kernel/core_pattern

# 查看coredump生成大小限制
ulimit -a

# 设置coredump生成
vim /etc/profile
ulimit -c ulimited
source /etc/profile

# 由apport产生的crash,并非直接coredump文件,而是需要解压出来
sudo apt install apport
apport-unpack xxxx.crash xxxx

# 调试上述解压后的CoreDump
cd xxxx
# 若非本机,则无法使用如下命令,需要将对应的版本中的二进制提取出来 gdb $exe CoreDump
gdb `cat ExecutablePath` CoreDump

# 如果是systemd启动的服务进程,可能无法产生dump,原因是systemd设置的服务的coredump限制没打开,可以采用两种方法:
# 方法一:针对服务自身/lib/systemd/system/xxx.service,添加dump生成设置
[Service]
User=root
LimitNOFILE=1000000
LimitCORE=infinity
# 方法二:直接修改systemd的全局配置/etc/systemd/system.conf
DefaultLimitCORE=infinity
# 注意:方法一和二修改完后,都需要通过systemctl daemon-reload重新加载配置才能生效

# 测试dump生成
kill -11 ${pid}

2. 调试命令

# 查看栈
bt


打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少