From de6f745cdefd87ef157fd4e58d7a413a735ec905 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Sun, 17 Jul 2011 15:26:56 +0000 Subject: [PATCH] Add support for conditionally compiling the debug_server to hand off crashed teams to the native debugger instead. This assumes the latter is installed in /boot/system/apps. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42445 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/debug/DebugServer.cpp | 36 +++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/servers/debug/DebugServer.cpp b/src/servers/debug/DebugServer.cpp index ffdb480491..1de703726b 100644 --- a/src/servers/debug/DebugServer.cpp +++ b/src/servers/debug/DebugServer.cpp @@ -27,6 +27,9 @@ #include +#define HANDOVER_USE_GDB 1 +//#define HANDOVER_USE_DEBUGGER 1 + #define USE_GUI true // define to false if the debug server shouldn't use GUI (i.e. an alert) @@ -45,9 +48,13 @@ using std::nothrow; static const char *kSignature = "application/x-vnd.Haiku-debug_server"; // paths to the apps used for debugging +#ifdef HANDOVER_USE_GDB static const char *kConsoledPath = "/bin/consoled"; static const char *kTerminalPath = "/boot/system/apps/Terminal"; static const char *kGDBPath = "/bin/gdb"; +#elif defined(HANDOVER_USE_DEBUGGER) +static const char *kDebuggerPath = "/boot/system/apps/Debugger"; +#endif static void @@ -434,8 +441,6 @@ TeamDebugHandler::_EnterDebugger() TRACE(("debug_server: TeamDebugHandler::_EnterDebugger(): team %ld\n", fTeam)); - bool debugInConsoled = _IsGUIServer() || !_AreGUIServersAlive(); - // prepare a debugger handover TRACE(("debug_server: TeamDebugHandler::_EnterDebugger(): preparing " "debugger handover for team %ld...\n", fTeam)); @@ -448,15 +453,17 @@ TeamDebugHandler::_EnterDebugger() return error; } - // prepare the argument vector + const char *argv[16]; + int argc = 0; char teamString[32]; +#ifdef HANDOVER_USE_GDB + bool debugInConsoled = _IsGUIServer() || !_AreGUIServersAlive(); + + // prepare the argument vector snprintf(teamString, sizeof(teamString), "--pid=%ld", fTeam); const char *terminal = (debugInConsoled ? kConsoledPath : kTerminalPath); - const char *argv[16]; - int argc = 0; - argv[argc++] = terminal; if (!debugInConsoled) { @@ -477,9 +484,24 @@ TeamDebugHandler::_EnterDebugger() TRACE(("debug_server: TeamDebugHandler::_EnterDebugger(): starting " "terminal (debugger) for team %ld...\n", fTeam)); +#elif defined(HANDOVER_USE_DEBUGGER) + // prepare the argument vector + snprintf(teamString, sizeof(teamString), "%ld", fTeam); + + argv[argc++] = kDebuggerPath; + argv[argc++] = "--team"; + argv[argc++] = teamString; + argv[argc] = NULL; + + // start the debugger + TRACE(("debug_server: TeamDebugHandler::_EnterDebugger(): starting " + "graphical debugger for team %ld...\n", fTeam)); + +#endif + thread_id thread = load_image(argc, argv, (const char**)environ); if (thread < 0) { - debug_printf("debug_server: Failed to start consoled + gdb: %s\n", + debug_printf("debug_server: Failed to start debugger: %s\n", strerror(thread)); return thread; }