如何在Visual Studio

时间:2018-01-09 13:30:03

标签: c++ visual-studio boost visual-studio-2015

我正在使用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中链接一些额外的库或设置一些额外的开关?

我真的很无能为力,如何获得文档中描述的行为。

0 个答案:

没有答案