[Interest] Detect if app is running under Qt Creator's debugger

Alexander Dyagilev alervdvcw at gmail.com
Tue Apr 23 17:40:55 CEST 2024


Oops, I see it has macOS support too. Fine. Something for Linux would be
perfect :)

On Tue, Apr 23, 2024 at 10:38 PM Alexander Dyagilev <alervdvcw at gmail.com>
wrote:

> David, thank you :)
>
> By the way, it would be perfect to have a cross platform code.
> Windows-only one is OK for me for now, but in case I switch to Linux (or
> macOS)...
>
>
> On Tue, Apr 23, 2024 at 10:22 PM David M. Cotter <dave at kjams.com> wrote:
>
>> // Returns true if the current process is being debugged (either
>> // running under the debugger or has a debugger attached post facto).
>> bool    CFDebuggerAttached()
>> {
>>         bool                            debuggedB(false);
>>
>>         #if defined(kDEBUG) || DEBUG
>>         #if !defined(_HELPERTOOL_)// && !_YAAF_
>>
>>         #if OPT_WINOS
>>         {
>>                 debuggedB = IsDebuggerPresent();
>>         }
>>         #else // OPT_MACOS
>>         {
>>                 int                 junk;
>>                 int                 mib[4];
>>                 struct kinfo_proc   info;
>>                 size_t              size;
>>
>>                 // Initialize the flags so that, if sysctl fails for some
>> bizarre
>>                 // reason, we get a predictable result.
>>
>>                 info.kp_proc.p_flag = 0;
>>
>>                 // Initialize mib, which tells sysctl the info we want,
>> in this case
>>                 // we're looking for information about a specific process
>> ID.
>>
>>                 mib[0] = CTL_KERN;
>>                 mib[1] = KERN_PROC;
>>                 mib[2] = KERN_PROC_PID;
>>                 mib[3] = getpid();
>>
>>                 // Call sysctl.
>>
>>                 size = sizeof(info);
>>                 junk = sysctl(mib, sizeof(mib) / sizeof(*mib), &info,
>> &size, NULL, 0);
>>                 assert(junk == 0);
>>
>>                 // We're being debugged if the P_TRACED flag is set.
>>
>>                 debuggedB = ( (info.kp_proc.p_flag & P_TRACED) != 0 );
>>         }
>>         #endif  //      OPT_MACOS
>>         #endif  //      !defined(_HELPERTOOL_) && !_YAAF_
>>         #endif  //      DEBUG
>>
>>     return debuggedB;
>> }
>>
>>
>> > On Apr 23, 2024, at 7:33 AM, Alexander Dyagilev <alervdvcw at gmail.com>
>> wrote:
>> >
>> > Hello,
>> >
>> > Is there a simple way to detect it?
>> >
>> > What I would like to achieve is to perform some debug check similar to
>> one  Q_ASSERT does, but instead I want it to just print to console in case
>> the app is NOT running under debugger and fall back to Q_ASSERT behavior
>> otherwise (so I can see the stack trace then).
>> > _______________________________________________
>> > Interest mailing list
>> > Interest at qt-project.org
>> > https://lists.qt-project.org/listinfo/interest
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20240423/16c2580e/attachment.htm>


More information about the Interest mailing list