mirror of
https://github.com/savoirfairelinux/jami-client-qt.git
synced 2025-12-17 07:53:24 +08:00
troubleshooting: add configurable crash reporting with crashpad
This commit adds a basic crash-report system that can be optionally configured to automatically send minidump crash-reports in addition to product versions and a platform description including the OS name and CPU architecture. Reports can be received at a configured REST endpoint(POST). This endpoint URL can be configured using a CMake variable `CRASH_REPORT_URL` which defaults to "http://localhost:8080/submit". - Introduces a new CMake option `ENABLE_CRASHREPORTS`, defaulting to OFF. This allows developers to enable crash reporting features at build time selectively. We also define a new macro with the same name to expose the state to QML in order to hide the UI components if needed. - Implemented conditional inclusion of crashpad dependencies using `ENABLE_CRASHREPORTS`. If set, `ENABLE_CRASHPAD` is also enabled (other crash reporters exist and we may want to use them). - 2 new application settings are added: `EnableCrashReporting` and `EnableAutomaticCrashReporting`. Default settings make it so crash-reports are generated but not automatically sent. With this default configuration, users will be prompted upon application start to confirm the report upload. Additionally, users may opt-in in order to have reports sent automatically at crash-time. Gitlab: #1454 Change-Id: I53edab2dae210240a99272479381695fce1e221b
This commit is contained in:
@@ -50,9 +50,13 @@ if(ENABLE_ASAN AND NOT MSVC)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
||||
endif()
|
||||
|
||||
# Enable this option when building for production.
|
||||
option(ENABLE_CRASHREPORTS "Enable crash reports" OFF)
|
||||
|
||||
# These values are exposed to QML and are better off being defined as values.
|
||||
define_macro_with_value(WITH_WEBENGINE)
|
||||
define_macro_with_value(APPSTORE)
|
||||
define_macro_with_value(ENABLE_CRASHREPORTS)
|
||||
|
||||
# jami-core
|
||||
if(NOT WITH_DAEMON_SUBMODULE)
|
||||
@@ -72,12 +76,6 @@ set(CLIENT_INCLUDE_DIRS, "")
|
||||
set(CLIENT_LINK_DIRS, "")
|
||||
set(CLIENT_LIBS, "")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
if(NOT MSVC)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-Og -ggdb")
|
||||
endif()
|
||||
|
||||
include(${PROJECT_SOURCE_DIR}/extras/build/cmake/contrib_tools.cmake)
|
||||
set(EXTRA_PATCHES_DIR ${PROJECT_SOURCE_DIR}/extras/patches)
|
||||
|
||||
@@ -87,6 +85,17 @@ list(APPEND QWINDOWKIT_OPTIONS
|
||||
QWINDOWKIT_BUILD_STATIC ON
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
# Beta config
|
||||
if(BETA)
|
||||
message(STATUS "Beta config enabled")
|
||||
add_definitions(-DBETA)
|
||||
set(JAMI_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Beta)
|
||||
else()
|
||||
set(JAMI_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Release)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
list(APPEND QWINDOWKIT_OPTIONS QWINDOWKIT_ENABLE_WINDOWS_SYSTEM_BORDERS OFF)
|
||||
endif()
|
||||
@@ -110,6 +119,44 @@ add_fetch_content(
|
||||
list(APPEND CLIENT_INCLUDE_DIRS ${QWindowKit_BINARY_DIR}/include)
|
||||
list(APPEND CLIENT_LIBS QWindowKit::Quick)
|
||||
|
||||
# If ENABLE_CRASHREPORTS is enabled, we will use crashpad_cmake for now.
|
||||
if(ENABLE_CRASHREPORTS)
|
||||
set(ENABLE_CRASHPAD ON)
|
||||
set(CRASH_REPORT_URL "http://localhost:8080/submit" CACHE STRING "URL for crash handler uploads")
|
||||
endif()
|
||||
add_definitions(-DCRASH_REPORT_URL="${CRASH_REPORT_URL}")
|
||||
|
||||
# Crash-report client: crashpad
|
||||
if(ENABLE_CRASHPAD)
|
||||
message(STATUS "Crashpad enabled for client")
|
||||
if(WIN32)
|
||||
set(CMAKE_OBJECT_PATH_MAX 256)
|
||||
add_definitions(-DNOMINMAX)
|
||||
endif()
|
||||
add_fetch_content(
|
||||
TARGET crashpad_cmake
|
||||
URL https://github.com/TheAssemblyArmada/crashpad-cmake.git
|
||||
BRANCH 80573adcc845071401c73c99eaec7fd9847d45fb
|
||||
)
|
||||
add_definitions(-DENABLE_CRASHPAD)
|
||||
if (WIN32)
|
||||
# This makes sure the console window doesn't show up when running the
|
||||
# crashpad_handler executable.
|
||||
set_target_properties(crashpad_handler PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS")
|
||||
# Set the output directory for the crashpad_handler executable. On Windows,
|
||||
# we use either the Release or Beta directory depending on the BETA option
|
||||
# which is set above.
|
||||
set_target_properties(crashpad_handler PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY_RELEASE "${JAMI_OUTPUT_DIRECTORY_RELEASE}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
if(NOT MSVC)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-Og -ggdb")
|
||||
endif()
|
||||
|
||||
set(CMAKE_AUTOMOC ON)
|
||||
set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
@@ -323,7 +370,8 @@ set(COMMON_SOURCES
|
||||
${APP_SRC_DIR}/imagedownloader.cpp
|
||||
${APP_SRC_DIR}/pluginversionmanager.cpp
|
||||
${APP_SRC_DIR}/connectioninfolistmodel.cpp
|
||||
${APP_SRC_DIR}/pluginversionmanager.cpp)
|
||||
${APP_SRC_DIR}/pluginversionmanager.cpp
|
||||
)
|
||||
|
||||
set(COMMON_HEADERS
|
||||
${APP_SRC_DIR}/global.h
|
||||
@@ -392,7 +440,10 @@ set(COMMON_HEADERS
|
||||
${APP_SRC_DIR}/imagedownloader.h
|
||||
${APP_SRC_DIR}/pluginversionmanager.h
|
||||
${APP_SRC_DIR}/connectioninfolistmodel.h
|
||||
${APP_SRC_DIR}/pttlistener.h)
|
||||
${APP_SRC_DIR}/pttlistener.h
|
||||
${APP_SRC_DIR}/crashreportclient.h
|
||||
${APP_SRC_DIR}/crashreporter.h
|
||||
)
|
||||
|
||||
# For libavutil/avframe.
|
||||
set(LIBJAMI_CONTRIB_DIR "${DAEMON_DIR}/contrib")
|
||||
@@ -411,6 +462,15 @@ endif()
|
||||
# Define PREFER_VULKAN to prefer Vulkan over the default API
|
||||
# on GNU/Linux and Windows. Metal is always preferred on macOS.
|
||||
|
||||
if(ENABLE_CRASHREPORTS)
|
||||
set(CRASHREPORT_CLIENT_DIR ${APP_SRC_DIR}/crashreportclients)
|
||||
if(ENABLE_CRASHPAD)
|
||||
list(APPEND CLIENT_LIBS crashpad_client)
|
||||
list(APPEND COMMON_SOURCES ${CRASHREPORT_CLIENT_DIR}/crashpad.cpp)
|
||||
list(APPEND COMMON_HEADERS ${CRASHREPORT_CLIENT_DIR}/crashpad.h)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
set(WINDOWS_SYS_LIBS
|
||||
windowsapp.lib
|
||||
@@ -456,16 +516,6 @@ if(MSVC)
|
||||
set(JAMID_SRC_PATH ${DAEMON_DIR}/contrib/msvc/include)
|
||||
set(GNUTLS_LIB ${DAEMON_DIR}/contrib/msvc/lib/x64/libgnutls.lib)
|
||||
|
||||
# Beta config
|
||||
if(BETA)
|
||||
message(STATUS "Beta config enabled")
|
||||
add_definitions(-DBETA)
|
||||
set(JAMI_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/x64/Beta)
|
||||
else()
|
||||
set(JAMI_OUTPUT_DIRECTORY_RELEASE
|
||||
${PROJECT_SOURCE_DIR}/x64/Release)
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
${JAMID_SRC_PATH}
|
||||
${LIBCLIENT_SRC_DIR}
|
||||
|
||||
Reference in New Issue
Block a user