2014-05-23 16 views
5

Czy możliwe jest ponowne zgłoszenie wyjątku bez utraty back-trace w gdb? Czy jest jakiś sposób, aby w gdb "cofnąć" kilka linii i śledzić z powrotem? Jestem na GDB 7.7.1, najnowszymgdb - Zapobieganie utracie śledzenia wstecznego w sytuacji catch/rethrow

Czasami znajduję się w takich sytuacjach, potrzebujących powrót ślad z oryginalnego rzut wyjątku i konieczności ustosunkowania się części try/catch, rekompilacji i ponownie uruchomiony w gdb.

try { 
    someFuncThatCanThrowException(); 
} catch(exceptionType& exception) { 
    if(@[email protected]) { 
     ... 
    } else { 
     throw; 
    } 
} 

---- lUB ----

try { 
    someFuncThatCanThrowException(); 
} catch(exceptionType& exception) { 
    exception.printMessageToCout(); 
    throw; 
} 

Odpowiedz

5

potrzebujący śladu wstecznego od oryginalnego rzutu wyjątku,

Czy można zastosować proste podejście do drukowania wszystkich śladów wszystkich rzutów, a następnie, gdy konieczne jest znalezienie śladu po danym szczególnym przypadku, wystarczy znaleźć go pod adresem wyjątku. Coś takiego sekwencji poleceń gdb:

set pagination off 
catch throw 
commands 
info args 
bt 
c 
end 

Kiedy trzeba znaleźć ślad wyjątku, najpierw wydrukować swój adres, tak:

print &exception 

I znaleźć jego adres w wyjściu gdb. Musi być wydrukowany przez info args. Po znalezieniu adresu pojawi się ślad tego wyjątku po wyjściu info args.

+0

W tym pytaniu jest nieco więcej dyskusji na temat polecenia "catch throw", co według mnie jest właściwym podejściem: http://stackoverflow.com/questions/10592568/can-gdb-be-used-to -backtrace-when-Execions-are-caught – gkanwar

Powiązane problemy