2012-12-18 6 views
22

Chciałbym wstępnie zdefiniować niektóre punkty przerwania w skrypcie gdb i wywołać specjalne polecenia w tych punktach przerwania, a następnie automatycznie kontynuować wykonywanie programu. Tak, najlepiej, chciałbym mieć skrypt gdb jak następuje:Skrypty gdb: wykonywanie poleceń w wybranym punkcie przerwania.

b someFunction 
... 
if breakpoint from above reached do: 
    print var1 
    call someOtherFunction 
    continue 
done 

Dodatkowo niefortunnym faktem jest, że nie można polegać na interfejsie Pythona za korzystanie z punktów przerwań, jak wersja gdb Pod serwer, na którym aktualnie pracuję, jest za stary!

+0

prawdopodobny duplikat [Wykonaj określone działanie, gdy pewne trafienia punktu przerwania w gdb] (http://stackoverflow.com/questions/6517423/do-specific-action-when-certain-breakpoint-hits-in-gdb) –

Odpowiedz

30

Powinieneś rzucić okiem na komendę command, która umożliwia dodawanie poleceń gdb po trafieniu punktu przerwania. Zobacz rozdziałpodręcznika gdb.

Na przykład:

break someFunction 
commands 
print var1 
end 

wola, gdy przerwania na someFunction jest trafiony, automatycznie print var1.

+8

Dziękuję Ty, to był klucz! Jedna mała dodatkowa uwaga: Jeśli masz obszerne wyjście, używając takiego polecenia i nie chcesz, aby było ono zatrzymywane za każdym razem, gdy trafi ono na dno terminalu (ponieważ wtedy gdb zapyta "Typ , aby kontynuować, lub q , aby zakończyć") , po prostu "ustaw pagination off" w gdb lub w twoim skrypcie. –

+0

Uwaga: to nie działa w trybie nieinteraktywnym (na przykład tryb --batch lub MI), dopóki nie zostanie naprawiony https://sourceware.org/bugzilla/show_bug.cgi?id=10079 – pixelbeat

+1

Powiedzmy, że wykonuję różdżkę, aby wykonać te same polecenia dla wielu punktów przerwania, jak to zrobić? (bez wklejania kopii;) –

Powiązane problemy