是否可以重新抛出异常而不会丢失gdb中的反向跟踪?或者有没有办法在gdb中备份"几条线和后面的痕迹?我是GDB 7.7.1,最新的。
我有时会发现自己遇到这样的情况,需要从异常的原始抛出中追溯,需要注释掉try / catch部分,重新编译,并在gdb中重新运行。
try {
someFuncThatCanThrowException();
} catch(exceptionType& exception) {
if(@CAN_RECOVER@) {
...
} else {
throw;
}
}
---- ---- OR
try {
someFuncThatCanThrowException();
} catch(exceptionType& exception) {
exception.printMessageToCout();
throw;
}
答案 0 :(得分:6)
需要从异常的原始抛出中追溯,
使用打印所有抛出的所有回溯的简单方法是否可以,然后当需要找到特定异常的回溯时,只需通过异常的地址找到它。像这个gdb命令序列的东西:
set pagination off
catch throw
commands
info args
bt
c
end
当您需要查找异常的回溯时,首先打印其地址,如下所示:
print &exception
在gdb输出中找到它的地址。它必须由info args
打印。一旦找到地址,info args
输出后就会出现此异常的回溯。