gbd常用调试步骤

来源:互联网 发布:江湖风云录脚本软件 编辑:程序博客网 时间:2024/05/21 19:34

前提:开启core采集程序崩溃的状态

查看core是否已经开启 ulimit -c查看  0:表示没有开启


su root

vi /etc/profile

在文本最后插入:ulimit -S -c unlimited > /dev/null 2>&1

source /etc/profile

上面设置全局开启core文件调试并且立即生效

因为生成的core文件同名会覆盖,所有重置core命名规则,让其变成[core.pid]格式

su root

vi /etc/sysctl.conf

在文本最后插入:kernel.core_pattern = ./core_%t_%p_%e

kernel.core_uses_pid = 1

sysctl -p /etc/sysctl.conf

在/etc/sysctl.conf文件中添加系统配置并且立即生效




一:程序崩溃生成了core文件

gdb server core.151223

然后bt


二:程序没有崩溃但是进入死循环卡掉CPU

ps -au 查看运行的所有进程判断哪个进程卡住


gdb 程序名 进程号 进入阻塞的进程


然后bt


info threads 查看该进程中的所有线程  *代表当前调试的线程

查看线程是否卡在某一个函数的执行上


thread 线程号,即使切换到对应线程,但是其他线程还是再跑

set scheduler-locking on  开始多线程单独调试. 

set scheduler-locking off 关闭多线程单独调试

然后bt

即可以查看死循环的函数调用情况



调试多进程:

调试正在运行的程序,通过ps -ef找到所需要调试的进程,复制文件描述符pid,这时候启动gdb

attach pid

gdb把pid的那个进程加载进来了,加载的进程会阻塞到当前正在运行的地方,直到使用命令控制

原创粉丝点击