diff --git a/.gitmodules b/.gitmodules index 458a23388..b0c0102e7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -31,3 +31,6 @@ [submodule "third_party/abseil-cpp"] path = third_party/abseil-cpp url = https://github.com/abseil/abseil-cpp.git +[submodule "third_party/backward-cpp"] + path = third_party/backward-cpp + url = https://github.com/bombela/backward-cpp.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 34bfbd7de..e1ac3482d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,7 +106,8 @@ set(DEVICE_LIBRARIES_VERSION_FILENAME "DEVICE_LIBRARIES_VERSION.csv") if(ANDROID) message(CHECK_START "Make version file for Dive device libraries") file( - WRITE ${CMAKE_INSTALL_PREFIX}/${DEVICE_LIBRARIES_VERSION_FILENAME} + WRITE + ${CMAKE_INSTALL_PREFIX}/${DEVICE_LIBRARIES_VERSION_FILENAME} "sha," ${DIVE_VERSION_SHA1} "\nversion," diff --git a/layer/CMakeLists.txt b/layer/CMakeLists.txt index 0f43c0fb9..8b8362f36 100644 --- a/layer/CMakeLists.txt +++ b/layer/CMakeLists.txt @@ -55,7 +55,8 @@ set(TARGET_LINK_LIBS PRIVATE service) add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) list( - APPEND TARGET_LINK_LIBS + APPEND + TARGET_LINK_LIBS PRIVATE -lm PRIVATE diff --git a/third_party/backward-cpp b/third_party/backward-cpp new file mode 160000 index 000000000..0bfd0a07a --- /dev/null +++ b/third_party/backward-cpp @@ -0,0 +1 @@ +Subproject commit 0bfd0a07a61551413ccd2ab9a9099af3bad40681 diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt index 2b6041006..7f012478c 100644 --- a/ui/CMakeLists.txt +++ b/ui/CMakeLists.txt @@ -48,6 +48,18 @@ include_directories(${CMAKE_SOURCE_DIR}) include_directories(${CMAKE_BINARY_DIR}) include_directories(${LibArchive_INCLUDE_DIRS}) +# Integrate backward-cpp for Linux only +if(UNIX AND NOT APPLE) + if(EXISTS "${CMAKE_SOURCE_DIR}/third_party/backward-cpp/CMakeLists.txt") + add_subdirectory( + "${CMAKE_SOURCE_DIR}/third_party/backward-cpp" + "${CMAKE_CURRENT_BINARY_DIR}/backward-cpp_build" + ) + else() + message(WARNING "backward-cpp not found...") + endif() +endif() + # Tell CMake to create the Dive executable add_executable( ${PROJECT_NAME} @@ -77,6 +89,10 @@ target_link_libraries( version_info ) +if(TARGET backward) + target_link_libraries(${PROJECT_NAME} backward) +endif() + # std::filesystem needs to link with libstdc++fs for g++ before 9.0 if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0) target_link_libraries(${PROJECT_NAME} stdc++fs) diff --git a/ui/collect_licenses.cmake b/ui/collect_licenses.cmake index 646901d71..1eba91eae 100644 --- a/ui/collect_licenses.cmake +++ b/ui/collect_licenses.cmake @@ -30,7 +30,8 @@ function( foreach(file ${files}) file( - APPEND "${OUTPUT_FILE}" + APPEND + "${OUTPUT_FILE}" "================================================================================\n" ) file(APPEND "${OUTPUT_FILE}" "${file}:\n\n") diff --git a/ui/main.cpp b/ui/main.cpp index 661f4628b..539b8bcd0 100644 --- a/ui/main.cpp +++ b/ui/main.cpp @@ -31,6 +31,13 @@ # include #endif +#include "backward.hpp" + +namespace +{ +backward::SignalHandling sh; +} // namespace + constexpr int kSplashScreenDuration = 2000; // 2s constexpr int kStartDelay = 500; // 0.5s diff --git a/ui/trace_window.cpp b/ui/trace_window.cpp index a2d06107f..bf165e4d2 100644 --- a/ui/trace_window.cpp +++ b/ui/trace_window.cpp @@ -746,6 +746,11 @@ void TraceWorker::run() const std::string host = "127.0.0.1"; int port = device->Port(); auto status = client.Connect(host, port); + + // intentional error + int *x = nullptr; + *x = 1; + if (!status.ok()) { std::string err_msg(status.message());