GDB 调试C++异常

调试C++异常的两种办法:
1) 直接获取异常的相关调用函数,在相应函数处设置断点。

2) 利用gdb的catch throw/catch。(程序执行后,方有效)


(gdb) bt
#0 0x0000003cf592e2ed in raise () from /lib64/tls/libc.so.6
#1 0x0000003cf592fa3e in abort () from /lib64/tls/libc.so.6
#2 0x0000003cf86b1138 in __gnu_cxx::__verbose_terminate_handler () from /usr/lib64/libstdc++.so.6
#3 0x0000003cf86af166 in __cxa_call_unexpected () from /usr/lib64/libstdc++.so.6
#4 0x0000003cf86af193 in std::terminate () from /usr/lib64/libstdc++.so.6
#5 0x0000003cf86af293 in __cxa_throw () from /usr/lib64/libstdc++.so.6
#6 0x0000000000400e9f in test ()
#7 0x0000000000400f9d in main ()

从上述调用栈,可以得知异常由__cxa_throw ()抛出,可在该函数处设置断点,从而得知“异常出自哪里”。

上述给出的获取异常调用函数信息的方法,应该和操作系统和调试器无关,其他平台类似。

1) 直接获取异常的相关调用函数,在相应函数处设置断点。
利用前一步骤的信息,直接b __cxa_throw,即可设置有效断点。

2) 利用gdb的catch throw/catch
该方法也很通用,但有一个需要注意的地方:在程序执行之前,catch throw/catch是无效的,需要在程序执行之后(先在main处设置断点),使用catch throw才有效。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值