Ticket #8173: debug_server.patch

File debug_server.patch, 5.8 KB (added by anevilyak, 12 years ago)

Proposed fix

  • src/kits/interface/ColumnListView.cpp

    diff --git a/src/kits/interface/ColumnListView.cpp b/src/kits/interface/ColumnListView.cpp
    index 0b034f1..50143b0 100644
    a b OutlineView::FixScrollBar(bool scrollToFit)  
    42914291{
    42924292    BScrollBar* vScrollBar = ScrollBar(B_VERTICAL);
    42934293    if (vScrollBar) {
     4294        fVisibleRect.PrintToStream();
    42944295        if (fItemsHeight > fVisibleRect.Height()) {
    42954296            float maxScrollBarValue = fItemsHeight - fVisibleRect.Height();
    42964297            vScrollBar->SetProportion(fVisibleRect.Height() / fItemsHeight);
  • src/servers/debug/DebugServer.cpp

    diff --git a/src/servers/debug/DebugServer.cpp b/src/servers/debug/DebugServer.cpp
    index 24d75e2..cf5d669 100644
    a b private:  
    115115    status_t _PopMessage(DebugMessage *&message);
    116116
    117117    thread_id _EnterDebugger();
    118     void _SetupGDBArguments(const char **argv, int &argc, char *teamString,
    119         size_t teamStringSize, bool usingConsoled);
     118    status_t _SetupGDBArguments(BString &argString, const char **argv,
     119        int &argc, char *teamString, size_t teamStringSize,
     120        bool usingConsoled);
    120121    void _KillTeam();
    121122
    122123    bool _HandleMessage(DebugMessage *message);
    TeamDebugHandler::_PopMessage(DebugMessage *&message)  
    435436}
    436437
    437438
    438 void
    439 TeamDebugHandler::_SetupGDBArguments(const char **argv, int &argc,
    440     char *teamString, size_t teamStringSize, bool usingConsoled)
     439status_t
     440TeamDebugHandler::_SetupGDBArguments(BString &argString, const char **argv,
     441    int &argc, char *teamString, size_t teamStringSize, bool usingConsoled)
    441442{
    442443    // prepare the argument vector
    443444    snprintf(teamString, teamStringSize, "--pid=%ld", fTeam);
    TeamDebugHandler::_SetupGDBArguments(const char **argv, int &argc,  
    449450        if (error != B_OK) {
    450451            debug_printf("debug_server: can't find system-bin directory: %s\n",
    451452                strerror(error));
    452             return;
     453            return error;
    453454        }
    454455        error = terminalPath.Append("consoled");
    455456        if (error != B_OK) {
    456457            debug_printf("debug_server: can't append to system-bin path: %s\n",
    457458                strerror(error));
    458             return;
     459            return error;
    459460        }
    460461    } else {
    461462        error = find_directory(B_SYSTEM_APPS_DIRECTORY, &terminalPath);
    462463        if (error != B_OK) {
    463464            debug_printf("debug_server: can't find system-apps directory: %s\n",
    464465                strerror(error));
    465             return;
     466            return error;
    466467        }
    467468        error = terminalPath.Append("Terminal");
    468469        if (error != B_OK) {
    469470            debug_printf("debug_server: can't append to system-apps path: %s\n",
    470471                strerror(error));
    471             return;
     472            return error;
    472473        }
    473474    }
    474475
    475     argv[argc++] = terminalPath.Path();
     476    argString = terminalPath.Path();
    476477
    477478    if (!usingConsoled) {
    478479        char windowTitle[64];
    479480        snprintf(windowTitle, sizeof(windowTitle), "Debug of Team %ld: %s",
    480481            fTeam, _LastPathComponent(fExecutablePath));
    481         argv[argc++] = "-t";
    482         argv[argc++] = windowTitle;
     482        argString += "\xff-t\xff";
     483        argString.Append(windowTitle);
    483484    }
    484485
    485486    BPath gdbPath;
    TeamDebugHandler::_SetupGDBArguments(const char **argv, int &argc,  
    487488    if (error != B_OK) {
    488489        debug_printf("debug_server: can't find system-bin directory: %s\n",
    489490            strerror(error));
    490         return;
     491        return error;
    491492    }
    492493    error = gdbPath.Append("gdb");
    493494    if (error != B_OK) {
    494495        debug_printf("debug_server: can't append to system-bin path: %s\n",
    495496            strerror(error));
    496         return;
     497        return error;
     498    }
     499
     500    argString += "\xff";
     501    argString += gdbPath.Path();
     502    argString += "\xff";
     503    argString += teamString;
     504    if (strlen(fExecutablePath) > 0) {
     505        argString += "\xff";
     506        argString += fExecutablePath;
    497507    }
    498508
    499     argv[argc++] = gdbPath.Path();
    500     argv[argc++] = teamString;
    501     if (strlen(fExecutablePath) > 0)
    502         argv[argc++] = fExecutablePath;
     509    int32 i = 0;
     510    do {
     511        argv[argc++] = &argString[i];
     512        for (; argString[i] != -1 && i < argString.Length(); i++)
     513            // skip to next argument
     514            ;
     515
     516        if (i < argString.Length()) {
     517            argString[i] = '\0';
     518            i++;
     519        }
     520    } while (i < argString.Length());
     521
    503522    argv[argc] = NULL;
     523
     524    return B_OK;
    504525}
    505526
    506527
    TeamDebugHandler::_EnterDebugger()  
    522543        return error;
    523544    }
    524545
     546    BString argString;
    525547    const char *argv[16];
    526548    int argc = 0;
    527549    char teamString[32];
    528550    bool debugInConsoled = _IsGUIServer() || !_AreGUIServersAlive();
    529551#ifdef HANDOVER_USE_GDB
    530552
    531     _SetupGDBArguments(argv, argc, teamString, sizeof(teamString),
    532         debugInConsoled);
     553    error = _SetupGDBArguments(argString, argv, argc, teamString,
     554        sizeof(teamString), debugInConsoled);
     555    if (error != B_OK) {
     556        debug_printf("debug_server: Failed to set up gdb arguments: %s\n",
     557            strerror(error));
     558        return error;
     559    }
    533560
    534561    // start the terminal
    535562    TRACE(("debug_server: TeamDebugHandler::_EnterDebugger(): starting  "
    TeamDebugHandler::_EnterDebugger()  
    537564
    538565#elif defined(HANDOVER_USE_DEBUGGER)
    539566    if (debugInConsoled) {
    540         _SetupGDBArguments(argv, argc, teamString, sizeof(teamString),
    541             debugInConsoled);
     567        error = _SetupGDBArguments(argString, argv, argc, teamString,
     568            sizeof(teamString), debugInConsoled);
     569        if (error != B_OK) {
     570            debug_printf("debug_server: Failed to set up gdb arguments: %s\n",
     571                strerror(error));
     572            return error;
     573        }
    542574    } else {
    543575        // prepare the argument vector
    544         snprintf(teamString, sizeof(teamString), "%ld", fTeam);
    545 
    546576        BPath debuggerPath;
    547577        error = find_directory(B_SYSTEM_APPS_DIRECTORY, &debuggerPath);
    548578        if (error != B_OK) {
    TeamDebugHandler::_EnterDebugger()  
    557587            return error;
    558588        }
    559589
    560         argv[argc++] = debuggerPath.Path();
    561         argv[argc++] = "--team";
    562         argv[argc++] = teamString;
     590        argString.SetToFormat("%s --team %ld", debuggerPath.Path(), fTeam);
     591
     592        argv[argc++] = argString.String();
     593        int32 stringOffset = strlen(debuggerPath.Path());
     594        argString[stringOffset] = '\0';
     595        argv[argc++] = &argString[stringOffset + 1];
     596        stringOffset += 7;
     597        argString[stringOffset] = '\0';
     598        argv[argc++] = &argString[stringOffset + 1];
    563599        argv[argc] = NULL;
    564600
    565601        // start the debugger