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