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){它最初是在哪里引导的