stack-unwinding

    6熱度

    1回答

    當在C++開卷我最近偶然進入這個這個C++/Lua的錯誤 int function_for_lua(lua_State* L) { std::string s("Trouble coming!"); /* ... */ return luaL_error(L,"something went wrong"); } 的錯誤是luaL_error使用longjmp,

    1熱度

    1回答

    libunwind在FreeBSD 8.1 amd64上作爲一個包(pkg_add -r libunwind)提供。 它在FreeBSD 8.1 i386上不可用。 當我從http://www.nongnu.org/libunwind/下載時,我無法構建它。 該錯誤是 在文件從ptrace的包含/ _UPT_elf.c:4: ../include/libunwind_i.h:65:5:錯誤:#ER

    4熱度

    1回答

    當我無法使用catch/try時(即我放開的代碼超出了我的控制範圍),我想將堆棧展開到任意級別。這可能嗎? 例如,在測試中,我希望我的測試調用一個方法來檢查先決條件,如果不符合這些先決條件,則展開給測試的調用者(從caller[1]恢復)。由於測試線束不在我的控制範圍內,因此我無法在適當的位置設置catch塊。

    2熱度

    3回答

    在DWARF2調試格式中,藉助.debug_frame部分中的CFI(調用幀信息)支持堆棧展開。這恰恰是一個表格,它爲每個寄存器在前一幀中保留一個規則來獲取它的值。但是,所有這些規則都依賴於寄存器在某個位置保存在堆棧中的事實。 當沒有幀指針時,在前一幀寄存器中獲取堆棧指針的值時不適用。在這種情況下,堆棧指針可能不會保存在堆棧上,而只是通過遞增和遞減值來進行管理。然而,dwarf2(或通常的矮小格式

    13熱度

    3回答

    我通過代碼處理SIGSEGV: int C() { int *i = NULL; *i = 10; // Crash there } int B() { return C(); } int A() { return B(); } int main(void) { struct sigaction handler;

    3熱度

    1回答

    在mips平臺上,我試圖讓Unwind工作。目前,如果我發出print_trace手動堆棧跟蹤被正確地如下所示: backtrace_helper 0x4b6958 backtrace_helper 0x4b6ab4 backtrace_helper 0x2ac2f628 得到的3-堆棧幀。 ./v(print_trace+0x38)[0x4b6958] ./v(main+0x90)[0x4b6a

    10熱度

    4回答

    我學習PHP類和異常,而且,從C來++背景,以下令我奇怪: 當一個派生類的構造函數拋出異常,它出現基類的析構函數不會自動運行: class Base { public function __construct() { print("Base const.\n"); } public function __destruct() { print("Base destr.\n");

    1熱度

    3回答

    是否存在以下任何缺陷; if (someCondition) throw boost::shared_ptr<SomeException>(new SomeException("foo!")); ... catch(const boost::shared_ptr<SomeException>& expRef) { }

    1熱度

    1回答

    我不明白如何在dwarf2展開堆棧確保在一些非常基本的ABI(應用程序二進制接口)方案中可靠地恢復參數。考慮一個ABI,它表示前三個參數必須在寄存器中,並放在堆棧上。據我所知,dwarf2堆棧展開機制確保如果CFI表被正確填充,可以獲得當前幀的調用點處的寄存器值。但是,這不會讓你進入調用者的序幕,並且知道參數寄存器的內容是什麼。所以,我認爲應該有辦法找到寄存器的值,即使在同一幀中的不同點(在.de

    3熱度

    1回答

    這不是關於從析構函數拋出異常是否安全的問題。 http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.9狀態: 「在堆棧展開,所有的本地在所有這些堆棧幀中的對象是自毀如果這些析構函數之一拋出異常(假定它拋出一個Bar對象),C++運行時系統是在一個不成功的情況下:它是否應該忽視酒吧並最終進入}捕捉(Foo e){它最初是在哪裏引導的