_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])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)