From fc33a680d17b5b6eccf752d6e52e02c28ea415b7 Mon Sep 17 00:00:00 2001 From: noisyfox Date: Mon, 2 Jun 2025 16:48:58 +0800 Subject: [PATCH] Add debugger detector for Linux --- src/slic3r/GUI/GUI_App.cpp | 2 +- src/slic3r/GUI/GUI_Utils.cpp | 21 +++++++++++++++++++++ src/slic3r/GUI/GUI_Utils.hpp | 2 ++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 2bd663c7cb..21563ef19c 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2584,7 +2584,7 @@ bool GUI_App::on_init_inner() bool debugger_attached = false; #if defined(__WINDOWS__) debugger_attached = IsDebuggerPresent(); -#elif defined(__WXOSX__) +#elif defined(__WXOSX__) || defined(__linux__) debugger_attached = is_debugger_present(); #endif if (debugger_attached) { diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index 0cbadc8e8c..d9d4c8143c 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -495,5 +495,26 @@ void fit_in_display(wxTopLevelWindow& window, wxSize desired_size) window.SetSize(desired_size); } +#ifdef __linux__ +// Detect if the application is running inside a debugger. +// https://stackoverflow.com/a/69842462/3289421 +bool is_debugger_present() { + std::ifstream sf("/proc/self/status"); + std::string s; + while (sf >> s) + { + if (s == "TracerPid:") + { + int pid; + sf >> pid; + return pid != 0; + } + std::getline(sf, s); + } + + return false; +} +#endif + } } diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index c9750e25b9..f6956001e8 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -496,7 +496,9 @@ int get_dpi_for_window(const wxWindow *window); #ifdef __WXOSX__ void dataview_remove_insets(wxDataViewCtrl* dv); +#endif +#if defined(__WXOSX__) || defined(__linux__) bool is_debugger_present(); #endif