我正在使用Visual Studio 2015,我想在我的项目中使用新的boost-stacktrace
库。
因此,我在boost-stacktrace
的文档中尝试了这个示例,但看起来输出对我没有帮助吗?
这是我的小试运行程序:
#include <signal.h>
#include <string>
#include <iostream>
#include <boost/stacktrace.hpp>
#include <boost/filesystem.hpp>
void my_signal_handler(int signum) {
::signal(signum, SIG_DFL);
boost::stacktrace::safe_dump_to("./backtrace.dump");
::raise(SIGABRT);
}
int fails() {
abort();
return 2;
}
int main(int argc, char** args) {
::signal(SIGSEGV, &my_signal_handler);
::signal(SIGABRT, &my_signal_handler);
if (boost::filesystem::exists("./backtrace.dump")) {
std::ifstream ifs("./backtrace.dump");
boost::stacktrace::stacktrace st = boost::stacktrace::stacktrace::from_dump(ifs);
std::cout << "Previous run crashed:\n" << st << std::endl;
ifs.close();
boost::filesystem::remove("./backtrace.dump");
}
try {
fails();
}
catch (...) {
}
}
第二次启动后输出:
Previous run crashed:
0# 0x00AA3E0D
1# 0x00AAFE53
2# 0x00AA1346
3# 0x579115DB
4# 0x5790E170
5# 0x5790EB92
6# 0x579100EC
7# 0x5790EAE4
8# 0x578F84EC
9# 0x578F86A1
10# 0x57912B8A
11# 0x00AA138C
12# 0x00AA1555
13# 0x00AC3C9E
14# 0x00AC3B80
15# 0x00AC3A2D
16# 0x00AC3CB8
17# BaseThreadInitThunk in kernel32
18# RtlInitializeExceptionChain in ntdll
19# RtlInitializeExceptionChain in ntdll
这对我没用。我预计在abort
的第15行的fails
中会调用main.cpp
之类的内容。
我是否必须在visual studio中设置一些特殊的编译器选项?也许有必要在boost-stacktrace
中链接一些额外的库或设置一些额外的开关?
我真的很无能为力,如何获得文档中描述的行为。