我不应该在线程过程中使用 _endthreadex() 来进行堆栈展开吗?
我检查了 win32 环境中线程过程的堆栈展开。 我的测试代码如下。 class Dummy { public: Dummy() { wcout << L"dummy ctor" << endl; } ~Dummy() { wc…
当 main 中未捕获异常时,为什么不调用析构函数?
我有以下代码: #include #include #include struct FooError {}; struct Foo { ~Foo() { std::cerr << "~Foo() executed" << std::endl; } explicit …
SIGSEGV 上的 mips _Unwind_Backtrace
在 mips 平台上,我正在尝试进行 Unwind 工作。目前,如果我手动发出 print_trace 堆栈跟踪正确显示如下: backtrace_helper 0x4b6958 backtrace_help…
如何在 SIGSEGV 上使用 _Unwind_Backtrace 获取 fullstacktrace
我通过代码处理 SIGSEGV: int C() { int *i = NULL; *i = 10; // Crash there } int B() { return C(); } int A() { return B(); } int main(void) {…
C++从析构函数抛出异常
这不是从析构函数抛出异常是否安全的问题。 http://www.parashift.com/c++-faq-lite /exceptions.html#faq-17.9 状态: “在堆栈展开期间,所有这些堆…
抛出一个 boost::shared_ptr<自定义异常>
是否存在以下任何陷阱; if (someCondition) throw boost::shared_ptr( new SomeException( "foo!" ) ); ... catch( const boost::shared_ptr& expRef…
如何在没有 catch/try/raise 的情况下展开(多级返回)堆栈?
当 catch/try 不可用时(即我要展开的代码不受我的控制),我想将堆栈展开到任意级别。这可能吗? 例如,在测试中,我想让我的测试调用一个检查先决条…
如何在 i386 FreeBSD 上构建 libunwind?
libunwind 在 FreeBSD 8.1 amd64 上作为软件包 (pkg_add -r libunwind) 提供。 它在 FreeBSD 8.1 i386 上不可用。 当我从 http://www.nongnu.org/libu…
C++ 中的堆栈展开使用Lua时
我最近偶然发现了这个 C++/Lua 错误 int function_for_lua( lua_State* L ) { std::string s("Trouble coming!"); /* ... */ return luaL_error(L,"so…