linux 退出gdb,linux – 设置一个gdb退出断点不工作?

_exit断点“错过”有两个常见的原因 – GDB没有将断点设置在正确的位置,或者程序执行(道德上等同于)syscall(SYS_exit,…)

什么信息打破和拆卸_exit说?

您可能可以说服GDB使用break *& _exit正确设置断点.或者,GDB-7.0支持catch系统调用.这样的东西应该可以工作(假设Linux / x86_64;请注意,在ix86上的数字将会不同),无论程序如何退出:

(gdb) catch syscall 60

Catchpoint 3 (syscall 'exit' [60])

(gdb) catch syscall 231

Catchpoint 4 (syscall 'exit_group' [231])

(gdb) c

Catchpoint 4 (call to syscall 'exit_group'), 0x00007ffff7912f3d in _exit () from /lib/libc.so.6

更新:

您的注释表示_exit断点设置正确,所以很可能您的进程不执行_exit.

这会使系统调用(SYS_exit,…)和另外一种可能性(我以前错过)):执行pthread_exit的所有线程.你可能想要在pthread_exit上设置一个断点(并且每次打它时执行信息线程 – 执行pthread_exit的最后一个线程将导致进程终止).

编辑:

还值得注意的是,您可以使用助记符名称,而不是系统调用数字.您还可以同时向捕获列表添加多个系统调用,如下所示:

(gdb) catch syscall exit exit_group

Catchpoint 2 (syscalls 'exit' [1] 'exit_group' [252])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值