diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c09f90c101b..9d18fc5db80 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -34,7 +34,7 @@ jobs: - name: vcpkg build uses: johnwason/vcpkg-action@v6 with: - pkgs: fcl bullet3[multithreading,double-precision,rtti] octomap console-bridge eigen3 yaml-cpp benchmark tinyxml2 assimp orocos-kdl pcl lapack-reference boost-dll boost-filesystem boost-filesystem boost-serialization boost-program-options boost-graph urdfdom ccd[double-precision] gtest + pkgs: fcl bullet3[multithreading,double-precision,rtti] octomap console-bridge eigen3 yaml-cpp benchmark tinyxml2 assimp orocos-kdl pcl lapack-reference boost-dll boost-filesystem boost-filesystem boost-serialization boost-program-options boost-graph boost-stacktrace urdfdom ccd[double-precision] gtest triplet: x64-windows-release extra-args: --clean-after-build token: ${{ github.token }} diff --git a/tesseract_common/CMakeLists.txt b/tesseract_common/CMakeLists.txt index 5dc4eb1dca9..0086d22d993 100644 --- a/tesseract_common/CMakeLists.txt +++ b/tesseract_common/CMakeLists.txt @@ -12,7 +12,22 @@ endif() include(cmake/tesseract_macros.cmake) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/") -find_package(Boost REQUIRED COMPONENTS system filesystem serialization) +if(WIN32) + set(TESSERACT_BACKTRACE_DEFINITION BOOST_STACKTRACE_USE_WINDBG) + set(TESSERACT_BACKTRACE_COMPONENT stacktrace_windbg) + # set(TESSERACT_BACKTRACE_LIB Boost::stacktrace_windbg) +else() + set(TESSERACT_BACKTRACE_DEFINITION BOOST_STACKTRACE_USE_BACKTRACE) + set(TESSERACT_BACKTRACE_COMPONENT stacktrace_backtrace) + set(TESSERACT_BACKTRACE_LIB Boost::stacktrace_backtrace) +endif() + +find_package( + Boost REQUIRED + COMPONENTS system + filesystem + serialization + ${TESSERACT_BACKTRACE_COMPONENT}) find_package(Eigen3 REQUIRED) find_package(TinyXML2 REQUIRED) find_package(yaml-cpp REQUIRED) @@ -66,10 +81,11 @@ target_link_libraries( Boost::system Boost::filesystem Boost::serialization + ${TESSERACT_BACKTRACE_LIB} console_bridge::console_bridge yaml-cpp) target_compile_options(${PROJECT_NAME} PUBLIC ${TESSERACT_COMPILE_OPTIONS_PUBLIC}) -target_compile_definitions(${PROJECT_NAME} PUBLIC ${TESSERACT_COMPILE_DEFINITIONS}) +target_compile_definitions(${PROJECT_NAME} PUBLIC ${TESSERACT_COMPILE_DEFINITIONS} ${TESSERACT_BACKTRACE_DEFINITION}) target_clang_tidy(${PROJECT_NAME} ENABLE ${TESSERACT_ENABLE_CLANG_TIDY}) target_cxx_version(${PROJECT_NAME} PUBLIC VERSION ${TESSERACT_CXX_VERSION}) target_code_coverage( diff --git a/tesseract_common/include/tesseract_common/type_erasure.h b/tesseract_common/include/tesseract_common/type_erasure.h index 3ff546eba26..fc676d1a016 100644 --- a/tesseract_common/include/tesseract_common/type_erasure.h +++ b/tesseract_common/include/tesseract_common/type_erasure.h @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -218,7 +219,8 @@ struct TypeErasureBase { if (getType() != typeid(T)) throw std::runtime_error("TypeErasureBase, tried to cast '" + std::string(getType().name()) + "' to '" + - std::string(typeid(T).name()) + "'!"); + std::string(typeid(T).name()) + "'\nBacktrace:\n" + + boost::stacktrace::to_string(boost::stacktrace::stacktrace()) + "\n"); auto* p = static_cast*>(value_->recover()); return *p; @@ -229,7 +231,8 @@ struct TypeErasureBase { if (getType() != typeid(T)) throw std::runtime_error("TypeErasureBase, tried to cast '" + std::string(getType().name()) + "' to '" + - std::string(typeid(T).name()) + "'!"); + std::string(typeid(T).name()) + "'\nBacktrace:\n" + + boost::stacktrace::to_string(boost::stacktrace::stacktrace()) + "\n"); const auto* p = static_cast*>(value_->recover()); return *p;