Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::Windows MSVS 2017上的stacktrace_C++_Visual Studio_Boost_Cmake_Stack Trace - Fatal编程技术网

C++ boost::Windows MSVS 2017上的stacktrace

C++ boost::Windows MSVS 2017上的stacktrace,c++,visual-studio,boost,cmake,stack-trace,C++,Visual Studio,Boost,Cmake,Stack Trace,我希望在Windows应用程序崩溃时进行回溯。Boost stacktrace看起来很有趣,我在Linux中玩过一点;但是,我在Windows中从安全转储到()得到的结果为零 我想我只是疏忽了一下,希望有人能帮上忙 我将MSVS2017编译器与ninja和CMake一起使用 我已经用以下标志构建了Boost v1.67: link=static address-model=64 variant=release threading=multi 我在boost\u 1\u 67\u 0/libs/

我希望在Windows应用程序崩溃时进行回溯。Boost stacktrace看起来很有趣,我在Linux中玩过一点;但是,我在Windows中从
安全转储到()
得到的结果为零

我想我只是疏忽了一下,希望有人能帮上忙

我将MSVS2017编译器与ninja和CMake一起使用

我已经用以下标志构建了Boost v1.67:

link=static address-model=64 variant=release threading=multi
我在
boost\u 1\u 67\u 0/libs/stacktrace/test/
中运行了测试,以确保正确构建了库

这是我的CMake文件,注意我使用了
-DCMAKE\u BUILD\u TYPE=RelWithDebInfo

cmake_minimum_required(VERSION 3.0)

set( target_name stacktrace_test)

# boost
set(Boost_USE_STATIC_LIBS ON)
find_package( Boost REQUIRED COMPONENTS date_time filesystem thread 
system stacktrace_windbg)

add_executable(${target_name} main.cpp)

set_property(TARGET ${target_name} PROPERTY CXX_STANDARD 14 )

target_compile_definitions(${target_name} PUBLIC
  BOOST_ALL_NO_LIB=1   # disable pragama inclusion 
  BOOST_STACKTRACE_LINK=1
  BOOST_STACKTRACE_USE_WINDBG=1
  )
target_include_directories(${target_name} SYSTEM PUBLIC
  ${Boost_INCLUDE_DIRS}
  )
target_link_libraries(${target_name}
  ${Boost_LIBRARIES} # boost
  dbgeng
  ole32
)
以下是我的代码,基于Boost stactrace的入门页面:

#include <iostream>
#include <signal.h>     // ::signal, ::raise
#include <boost/stacktrace/stacktrace.hpp>
#include <boost/filesystem.hpp>

void handler(int signum)
{
   ::signal(signum, SIG_DFL);
   size_t result = boost::stacktrace::safe_dump_to("./backtrace.dump");
   std::cout << " " << result << std::endl;
   ::raise(SIGABRT);
}

void crash()
{
   abort();
}

int main(int,char**)
{
   ::signal(SIGSEGV, &handler);
   ::signal(SIGABRT, &handler);
   if(boost::filesystem::exists("backtrace.dump"))  // existing stacktrace?
   {
      std::ifstream ifs("backtrace.dump");
      boost::stacktrace::stacktrace st = 
                      boost::stacktrace::stacktrace::from_dump(ifs);
      std::cout << "Stacktrace from prior run:\n" << st << std::endl;
      ifs.close();   // cleanup
      boost::filesystem::remove("backtrace.dump");
      return 0;
   }
   crash();
   return 0;
}
我已经检查了编译标志,没有任何东西向我跳出来

感谢您的帮助! 非常感谢。
SB

事实证明,boost::stacktrace中的功能在windows中被禁用,因为据报道它可能导致死锁。重新启用
stacktrace/detail/safe\u dump\u win.ipp中的代码为我解决了问题

注意,我以github开发版本的
safe\u dump\u win.ipp
frame\u msvc.ipp
,以及
frame\u unwind.ipp
作为起点


在我有限的测试中,我没有看到死锁。如果软件死锁,我的情况不会比它悄然崩溃更糟,希望我能得到比死锁更多的痕迹

事实证明,boost::stacktrace中的功能对于windows是禁用的,因为据报道它可能导致死锁。重新启用
stacktrace/detail/safe\u dump\u win.ipp中的代码为我解决了问题

注意,我以github开发版本的
safe\u dump\u win.ipp
frame\u msvc.ipp
,以及
frame\u unwind.ipp
作为起点


在我有限的测试中,我没有看到死锁。如果软件死锁,我的情况不会比它悄然崩溃更糟,希望我能得到比死锁更多的痕迹

不相关,但CMake尚不支持Boost 1.67:不相关,但CMake尚不支持Boost 1.67:
C:\SRC\sandbox\boost\stacktrace\win-simple\Build_RWD>ninja -v
[1/2  50%]:C:\PROGRA~2\MICROS~1\2017\BUILDT~1\VC\Tools\MSVC\1413~1.261\bin\Hostx64\x64\cl.exe  /nologo /TP -DBOOST_ALL_NO_LIB=1 -DBOOST_STACKTRACE_LINK=1 -DBOOST_STACKTRACE_USE_WINDBG=1 -IC:\3rd_libs\boost\boost_1_67_0 /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /Zi /O2 /Ob1 /DNDEBUG   -std:c++14 /showIncludes /FoCMakeFiles\stacktrace_test.dir\main.cpp.obj /FdCMakeFiles\stacktrace_test.dir\ /FS -c ..\main.cpp
[2/2 100%]:cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\stacktrace_test.dir --manifests  -- C:\PROGRA~2\MICROS~1\2017\BUILDT~1\VC\Tools\MSVC\1413~1.261\bin\Hostx64\x64\link.exe /nologo CMakeFiles\stacktrace_test.dir\main.cpp.obj  /out:stacktrace_test.exe /implib:stacktrace_test.lib /pdb:stacktrace_test.pdb /version:0.0  /machine:x64 /debug /INCREMENTAL /subsystem:console  C:\3rd_libs\boost\boost_1_67_0\stage\lib\libboost_date_time.lib C:\3rd_libs\boost\boost_1_67_0\stage\lib\libboost_filesystem.lib C:\3rd_libs\boost\boost_1_67_0\stage\lib\libboost_thread.lib C:\3rd_libs\boost\boost_1_67_0\stage\lib\libboost_system.lib C:\3rd_libs\boost\boost_1_67_0\stage\lib\libboost_stacktrace_windbg.lib C:\3rd_libs\boost\boost_1_67_0\stage\lib\libboost_chrono.lib C:\3rd_libs\boost\boost_1_67_0\stage\lib\libboost_atomic.lib dbgeng.lib ole32.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
LINK : stacktrace_test.exe not found or not built by the last incremental link; performing full link