Boost 的堆栈跟踪库不适用于 C++ CLI

Boost's stacktrace library doesn't work with C++ CLI

我一直在使用 Boost 堆栈跟踪库来打印我的程序的堆栈跟踪。

Boost 1.78.0

当用纯 C++ 编译时,它编译并且我的程序很好地打印堆栈跟踪。 然而,当使用 C++ /CLI 编译时,我的程序不打印堆栈跟踪。

这是我的可重现示例:

#include <boost/stacktrace.hpp>
#include <sstream>
#include <iostream>
#include <string>

int main() {
    std::stringstream stack;
    stack << boost::stacktrace::stacktrace();
    std::string stacktrace = stack.str();      // The string "stacktrace" is empty when running with C++ CLI
    std::cout << stacktrace;
}

使用 C++ /CLI 编译不会将堆栈跟踪打印到标准输出,而使用纯 C++ 编译会将其打印到标准输出。

另一件事是,当我使用 boost/stacktrace/stacktrace.hpp 而不是 boost/stacktrace.hpp 时,即使在纯 C++ 中,我的程序也无法打印堆栈跟踪。

遗憾的是,我在堆栈溢出上找不到任何关于此问题的参考资料。

我在 Windows,我正在使用 Visual Studio 2022。

我使用的是Boost版本版本:1.78.0.

我用 vcpkg 安装了 boost。

谢谢

我不认为 Boost Stacktrace 声称支持 CLR。​​

我期待一些输出,但不是特别有用的输出。

当然,在 CLR 模式下,您可以使用 .NET 堆栈跟踪:https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.stacktrace?view=net-6.0

Another thing is that when I use boost/stacktrace/stacktrace.hpp instead of boost/stacktrace.hpp my program fails to print the stacktrace even in pure C++.

这可能是因为这不是正确的用法。正确配置库有很多具体细节,请参阅 https://www.boost.org/doc/libs/1_79_0/doc/html/stacktrace/configuration_and_build.html。其中一种可能的配置导致 no-op 实施。