设置gdb出口断点不起作用?

设置gdb出口断点不起作用?,第1张

设置gdb出口断点不起作用?

_exit
断点“丢失”的常见原因有两个-要么
GDB
未将断点设置在正确的位置,要么程序执行了(在道德上等效)
syscall(SYS_exit,...)

什么

info break
disassemble _exit
怎么说?

您也许可以说服

GDB
使用正确设置断点
break *&_exit
。或者,
GDB-7.0
支持
catchsyscall
。不管程序如何退出,这样的事情都应该起作用(假设
Linux/x86_64
;请注意,
ix86
数字会有所不同):

(gdb) catch syscall 60Catchpoint 3 (syscall 'exit' [60])(gdb) catch syscall 231Catchpoint 4 (syscall 'exit_group' [231])(gdb) cCatchpoint 4 (call to syscall 'exit_group'), 0x00007ffff7912f3d in _exit () from /lib/libc.so.6

更新:
您的注释表明_exit断点设置正确,因此您的进程很可能没有执行

_exit

这留下

syscall(SYS_exit,...)
了另一种可能性(我之前没有提到过):所有线程正在执行
pthread_exit
。您可能还希望在其上设置一个断点
pthread_exit
(并在
infothread
每次单击该断点时执行-最后一个线程执行
pthread_exit
将导致进程终止)。

编辑:

同样值得注意的是,您可以使用助记符名称,而不是syscall号。您还可以同时将多个系统调用添加到捕获列表,如下所示:

(gdb) catch syscall exit exit_groupCatchpoint 2 (syscalls 'exit' [1] 'exit_group' [252])


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4987332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存