本文主要是介绍【gdb】24.gdb调试和coredump,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
gdb调试和coredump
下面一行命令是用来gdb调试的一种方式
gdb --args binary_node --flagfile=conf/xx.conf
r #run
或者分两步执行:
gdb binary_node
#下面这句是在进入gdb之后执行
set args --flagfile=conf/xx.conf
r #run
下面一行命令是利用coredump文件来gdb调试的一种方式:
gdb binary_node xxx.core
参考网址:
https://baijiahao.baidu.com/s?id=1599347824327158577
https://www.jianshu.com/p/e38a3f1cf7f7
https://www.pianshen.com/article/2260634841/
ulimit -c
如果返回值是 0,则表示 core dump 已被禁用。其他数字表示 core dump 文件的最大大小(以 KB 为单位),或者 unlimited 表示没有限制。
ulimit -c unlimited
# 可以产生core且不受大小限制
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
#生成的core文件存放在/tmp目录下
上面%t
是写成时间戳的形式,这个时间戳是程序挂掉时的时间戳。
也可以写成年月日时分秒
的形式,但是存的coredump是下面这条shell命令执行时候的时间,并不是程序挂掉时的时间,所以不推荐:
sudo sysctl -w kernel.core_pattern=/tmp/core.%e.%p.%h.$(date +'%Y%m%d%H%M%S')
#生成的core文件存放在/tmp目录下
注意,修改 ulimit 的设置通常只对当前会话框有效,另开一个终端就会失效。
几个常用的gdb命令
bt
或where
可以定位到出现问题的函数
l(list)
显示源代码,并且可以看到对应的行号;
b(break)x
x是行号,表示在对应的行号位置设置断点;
p(print)x
x是变量名,表示打印变量x的值
r(run)
表示继续执行到断点的位置
n(next)
表示执行下一步
c(continue)
表示继续执行
q(quit)
表示退出gdb
这篇关于【gdb】24.gdb调试和coredump的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!