从捕获块获取回溯
回答
我不这么认为。当执行程序在catch块中停止时,堆栈被解开,并且之前发生的所有事件都不再堆栈了。
是的,确切地说。这给我们带来了“当抛出异常时我该如何处理一些事情” - http://stackoverflow.com/q/4223390/57428 – sharptooth 2010-11-26 10:53:19
Len Holgate提到了调试API,以便在引发异常时捕获异常。看起来很复杂,但可行。 – Dialecticus 2010-11-26 10:57:04
您可能会对正在开发的Boost库感兴趣:Portable Backtrace。例如:
#include <boost/backtrace.hpp>
#include <iostream>
int foo()
{
throw boost::runtime_error("My Error");
return 10;
}
int bar()
{
return foo()+20;
}
int main()
{
try {
std::cout << bar() << std::endl;
}
catch(std::exception const &e)
{
std::cerr << e.what() << std::endl;
std::cerr << boost::trace(e);
}
}
打印:
My Error
0x403fe1: boost::stack_trace::trace(void**, int) + 0x1b in ./test_backtrace
0x405451: boost::backtrace::backtrace(unsigned long) + 0x65 in ./test_backtrace
0x4054d2: boost::runtime_error::runtime_error(std::string const&) + 0x32 in ./test_backtrace
0x40417e: foo() + 0x44 in ./test_backtrace
0x40425c: bar() + 0x9 in ./test_backtrace
0x404271: main + 0x10 in ./test_backtrace
0x7fd612ecd1a6: __libc_start_main + 0xe6 in /lib/libc.so.6
0x403b39: __gxx_personality_v0 + 0x99 in ./test_backtrace
希望这有助于!
有问题的课程是否有共同的基础,您可以编辑?
否则,我在How can some code be run each time an exception is thrown in a Visual C++ program?; -P提供了一个美好的但非常低估的答案;其他一些人也认为。
- 1. 从Python获取回溯C API
- 2. Python - 通过回溯获取调用模块的路径,问题?
- 3. 导入模块并获取python 2.7中的回溯错误
- 4. 空捕获块
- 5. 捕获块没有捕获异常
- 6. 从python捕获返回值
- 7. 如何从跟踪点获取堆栈回溯? (GDB)
- 8. 如何从googletest中的异常中获取回溯信息?
- 9. Python subprocess.Popen - 如何在中止时捕获孩子回溯
- 10. 如何从preg_match获取命名捕获?
- 11. 从条件REGEX获取捕获组
- 12. 捕获回车键
- 13. 如何获得回溯在http://locust.io/
- 14. 如何获得更详细的回溯
- 15. 从块中获取内容
- 16. 从模块中获取值
- 17. 从jquery滑块获取值
- 18. 从GNAT.SHA1获取SHA1块
- 19. 从类型获取模块
- 20. 从NSURL获取块设备
- 21. 在catch块捕获异常
- 22. 交易和捕获块
- 23. 捕捉异常而没有捕获块
- 24. 捕获返回值从高管
- 25. 捕获返回值从ADO记录集
- 26. 如何在Prolog回溯期间获取值的列表?
- 27. 如何在GCC回溯中获取非动态符号?
- 28. 获取AOSP的静态二进制回溯
- 29. 获取nodejs回溯中的完全限定路径?
- 30. 如何在ruby回溯中获取源和变量值?
你可能想看看[这篇文章](http://stackoverflow.com/questions/3355683/c-stack-trace-from-unhandled-exception“c-stack-trace-from-unhandled-例外”)。它可能会让你接近你想要的位置。 – 2010-11-26 09:29:32
std :: set_terminate的问题在于,当调用回调时程序仍会终止。 – 2010-11-26 13:58:38