xref: /aosp_15_r20/external/cronet/base/debug/debugger.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker // This is a cross platform interface for helper functions related to
6*6777b538SAndroid Build Coastguard Worker // debuggers.  You should use this to test if you're running under a debugger,
7*6777b538SAndroid Build Coastguard Worker // and if you would like to yield (breakpoint) into the debugger.
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #ifndef BASE_DEBUG_DEBUGGER_H_
10*6777b538SAndroid Build Coastguard Worker #define BASE_DEBUG_DEBUGGER_H_
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace base {
15*6777b538SAndroid Build Coastguard Worker namespace debug {
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker // Waits wait_seconds seconds for a debugger to attach to the current process.
18*6777b538SAndroid Build Coastguard Worker // When silent is false, an exception is thrown when a debugger is detected.
19*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool WaitForDebugger(int wait_seconds, bool silent);
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker // Returns true if the given process is being run under a debugger.
22*6777b538SAndroid Build Coastguard Worker //
23*6777b538SAndroid Build Coastguard Worker // On OS X, the underlying mechanism doesn't work when the sandbox is enabled.
24*6777b538SAndroid Build Coastguard Worker // To get around this, this function caches its value.
25*6777b538SAndroid Build Coastguard Worker //
26*6777b538SAndroid Build Coastguard Worker // WARNING: Because of this, on OS X, a call MUST be made to this function
27*6777b538SAndroid Build Coastguard Worker // BEFORE the sandbox is enabled.
28*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool BeingDebugged();
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker // Break into the debugger, assumes a debugger is present.
31*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void BreakDebugger();
32*6777b538SAndroid Build Coastguard Worker // Async-safe version of BreakDebugger(). In particular, this does not allocate
33*6777b538SAndroid Build Coastguard Worker // any memory. More broadly, must be safe to call from anywhere, including
34*6777b538SAndroid Build Coastguard Worker // signal handlers.
35*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void BreakDebuggerAsyncSafe();
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker // Used in test code, this controls whether showing dialogs and breaking into
38*6777b538SAndroid Build Coastguard Worker // the debugger is suppressed for debug errors, even in debug mode (normally
39*6777b538SAndroid Build Coastguard Worker // release mode doesn't do this stuff --  this is controlled separately).
40*6777b538SAndroid Build Coastguard Worker // Normally UI is not suppressed.  This is normally used when running automated
41*6777b538SAndroid Build Coastguard Worker // tests where we want a crash rather than a dialog or a debugger.
42*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void SetSuppressDebugUI(bool suppress);
43*6777b538SAndroid Build Coastguard Worker BASE_EXPORT bool IsDebugUISuppressed();
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker // If a debugger is present, verifies that it is properly set up, and DCHECK()s
46*6777b538SAndroid Build Coastguard Worker // if misconfigured.  Currently only verifies that //tools/gdb/gdbinit has been
47*6777b538SAndroid Build Coastguard Worker // sourced when using gdb on Linux and //tools/lldb/lldbinit.py has been sourced
48*6777b538SAndroid Build Coastguard Worker // when using lldb on macOS.
49*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void VerifyDebugger();
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker }  // namespace debug
52*6777b538SAndroid Build Coastguard Worker }  // namespace base
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker #endif  // BASE_DEBUG_DEBUGGER_H_
55