從捕獲塊獲取回溯
回答
我不這麼認爲。當執行程序在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