栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux中gdb进程遇到的问题和坑

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux中gdb进程遇到的问题和坑

文章目录

一、非生产环境中可以gdb到一个进程里面,但是有时候停顿太久,gdb附身到这个进程会挂掉,这时候就需要杀死这个gdb进程二、gdb调试程序的时候,有时gdb会因为某些原因crash掉。这时被调试的那个进程往往就成了僵尸进程。这种僵尸进程用killall是杀不掉的,用kill -9或者kill -SIGKILL也是杀不掉的,甚至退出用户登录也杀不掉。很多人这时候只好reboot机器。三、gdb的print打印默认打印不全四、让被gdb调试的程序能够接受信号五、函数明明存在,添加断点却无效六、断点的类型,这里只介绍条件断点

一、非生产环境中可以gdb到一个进程里面,但是有时候停顿太久,gdb附身到这个进程会挂掉,这时候就需要杀死这个gdb进程
开启另一个终端 root权限执行
ps -A|grep gdb
可查出 gdb进程号
再用
kill -9 进程号
可强制停止kill该进程
二、gdb调试程序的时候,有时gdb会因为某些原因crash掉。这时被调试的那个进程往往就成了僵尸进程。这种僵尸进程用killall是杀不掉的,用kill -9或者kill -SIGKILL也是杀不掉的,甚至退出用户登录也杀不掉。很多人这时候只好reboot机器。

但是可以用kill -18就能杀掉gdb产生的僵尸进程。信号18是SIGCONT,这个信号可以让停在断点上的进程继续运行。

维基百科上说:
When SIGSTOP is sent to a process, the usual behaviour is to pause that process in its current state. The process will only resume execution if it is sent the SIGCONT signal. SIGSTOP and SIGCONT are used for job control in the Unix shell, among other purposes. SIGSTOP cannot be caught or ignored.

job control意思
Job control (workplace), the ability of a person to influence what happens in their work environment 三、gdb的print打印默认打印不全

使用set print element 0 设置后就能完整显示了

四、让被gdb调试的程序能够接受信号

法一:
使用singal命令可以产生一个信号量给被调试的程序。如中断信号Ctrl+C。这非常方便于程序的调试,可以在程序运行的任意位置设置断点,并在该断点用gdb产生一个信号量。精确地在某处产生信号非常有利程序的调试。 其语法是: signal Linux的系统信号量通常从1到15。所以的取值也在这个范围。 signal命令和shell的kill命令不同,系统的kill命令发信号给被调试程序时,是由gdb截获的,而signal命令所发出的信号则是直接发给被调试程序的。

法二:(改变gdb对特定信号的处理)
handle SIGINT nostop print 告诉gdb在接受到SIGINT时不要停止,并把该信号传递给目标调试程序

五、函数明明存在,添加断点却无效

使用结果break 函数名字添加断点,gdb却提示make breakpoint pending on future shared lirary load ? y or n,输入y却没用,添加的断点也不会触发,需要改成
b 文件:行号 ,这样就能添加同样效果的断点了

六、断点的类型,这里只介绍条件断点

断点的类型:普通断点、条件断点、硬件断点(watch)
条件断点:
法一:b 文件名:行号 if 条件
法二:b 文件名:行号
condition 断点序号 条件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号