- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
调用堆栈:
#0 0x00007faf7fdb8ed5 in raise () from /lib/libc.so.6
#1 0x00007faf7fdba3f3 in abort () from /lib/libc.so.6
#2 0x00007faf8063c294 in _gnu_cxx::_verbose_terminate_handler () from /usr/lib/libstdc++.so.6
#3 0x00007faf8063a696 in ?? () from /usr/lib/libstdc++.so.6
#4 0x00007faf8063988b in ?? () from /usr/lib/libstdc++.so.6
#5 0x00007faf8063a458 in _gxx_personality_v0 () from /usr/lib/libstdc++.so.6
#6 0x00007faf800eacb3 in ?? () from /lib/libgcc_s.so.1
#7 0x00007faf800ead78 in _Unwind_Resume () from /lib/libgcc_s.so.1
#8 0x0000000000a0ea6c in ~ServletRequest (this=0x7faf60a156c0) at ../myapp/servlets/server.cpp:124
#9 0x00000000009d8be2 in boost::detail::sp_counted_impl_p<MyApp::ServletRequest>::dispose (this=<value optimized out> at /usr/include/boost/checked_delete.hpp:34
#10 0x00000000006f5569 in ~shared_count (this=<value optimized out> at /usr/include/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp:145
#11 0x00000000009d4a59 in MyApp::Dispatcher::request (this=0x19413b8, req={px = 0x7faf732dfc70, pn = {pi = 0x7faf732dfb60}}) at /usr/include/boost/smart_ptr/shared_ptr.hpp:169
#12 0x00000000009afd9e in boost::detail::function::void_function_ref_invoker1<MyApp::Dispatcher, void, boost::shared_ptr<MyLib::HTTP::ServerRequest> >::invoke (function_obj_ptr=<value optimized out>, a0=<value optimized out> at ../libtriton/mordor/mordor/http/servlet.h:28
#13 0x0000000000cd2bb3 in boost::function1<void, boost::shared_ptr<MyLib::HTTP::ServerRequest> >::operator() (this=<value optimized out>, a0=<value optimized out> at /usr/include/boost/function/function_template.hpp:1013
任何人都遇到过这个问题,可以阐明为什么在 _Unwind_Resume
中发生中止吗?
最佳答案
写了一个简单的测试来模拟这个问题:
class A {
public:
typedef boost::shared_ptr<A> ptr;
A(std::string name = "default") : m_name(name) { }
void throwInDestor() {
if (m_name == "throwInDestructor")
throw 34;
}
~A(){
throwInDestor();
};
void throwName() {
throw m_name;
}
std::string m_name;
};
void callfunc(A::ptr a) {
a->throwName();
}
void callf1(A::ptr a) {
A::ptr b(new A("throwInDestructor"));
callfunc(a);
}
void callf2() {
A::ptr a(new A("call2"));
callf1(a);
}
int main() {
try {
try {
callf2();
} catch (...) {
std::cout << "inner: " << boost::diagnostic_information(boost::current_exception()) << std::endl;
}
} catch (...) {
std::cout << "outer: " << boost::diagnostic_information(boost::current_exception()) << std::endl;
}
}
用g++编译,成功重现_Unwind_Resume
错误。_Unwind_Resume
错误可以通过在 class A
的析构函数中捕获异常来忽略,请参见以下内容:
~A(){
try {
throwInDestor();
} catch (...) {
std::cout << "A::~A: " << boost::diagnostic_information(boost::current_exception()) << std::endl;
}
};
std::string
异常被抛出,并且在主函数中找到了 catch 处理程序。然后在 callf1
中进行清理工作时发生崩溃,而 std::string
异常正在传播到 main因为第一个异常是在展开和清理工作的过程中,但是int
异常是在函数callf1
的A
的析构函数中抛出的。因此解决方案可以是在 A
的析构函数中立即捕获 int
异常,如上所述。
我不知道它为什么有效,但它确实有效。
关于c++ - 应用程序因 _Unwind_Resume 中止错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15015618/
一段时间以来,我一直在使用我编写的一小部分文件,以便更轻松地与 WinAPI 交互。虽然,当我想重用它们、等待它们重新编译等时,不断移动文件变得很痛苦。我最终决定将它们放入 DLL 中,并完成它,但我
调用堆栈: #0 0x00007faf7fdb8ed5 in raise () from /lib/libc.so.6 #1 0x00007faf7fdba3f3 in abort () from /
当尝试在 qt 中切换到 gcc 4.6.2(在工具链中设置它)时,出现以下错误: c:\ndk_buildrepos\qt-desktop\src\winmain\qtmain_win.cpp:93
我正在尝试使用 JsonCpp 库。我在 Windows 上使用 MinGW 和 CodeBlocks。 当我包含来自 json header 的任何内容时,我的链接器崩溃并发出这两个错误。我开始环顾
我正在尝试为 iOS7 准备一个应用程序以供审查,但我碰壁了: 该应用在...._Unwind_Resume中引用了非公开符号 在 Release-iphoneos 内部,我试图找到罪魁祸首nm -u
我从 Core Date 收到这个奇怪的错误,我不明白为什么。 当我删除 UITableView 的一行时,将执行下面的代码。 我将一个字符串和一个对象传递给下面的方法,它在具有该字符串和该对象的外键
我无法使用 openwrt 工具链构建静态二进制文件。 # staging_dir/toolchain-i386_i686_gcc-4.8-linaro_glibc-2.21/bin/i486-ope
如标题所述,我从 https://developer.android.google.cn/ndk/downloads/index.html 下载 Android NDK。并使用 clang 工具链编译
我有 Windows 7 64 位,我刚刚安装了 Qt(开源,版本 2010.04)并将其集成到 Eclipse(CDT,版本 Helios)中。一切似乎都很顺利,我添加了 Qt 和 mingw32
我是一名优秀的程序员,十分优秀!