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

David M. Cotter dave at kjams.com
Tue Apr 23 17:22:41 CEST 2024


// 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



More information about the Interest mailing list