Jest to w pewnym stopniu powiązane z gdb ustaw nadpisywanie logowanie powinno nadpisywać gdb.txt poprawnie? .
Powiedzmy, że prowadzę sesję jakiejś aplikacji. Na przykład dla celów, pozwólcie mi ponownie wziąć przykład qbittorrent.
Jak wspominaliśmy wcześniej, tak przebiega uruchamianie –
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
Jednym ze znanych mi sposobów jest prawidłowe zamknięcie aplikacji, ale czasami aplikacja się zawiesza / zajmuje zbyt dużo czasu lub po prostu nie odpowiada.
Wtedy jedyną opcją, która mi pozostaje, jest użycie CTRL+C
, które, jeśli dobrze rozumiem, zabija podstawową aplikację , w naszym przykładzie qbittorrent, a następnie jestem w stanie zamknąć gdb za pomocą
(gdb) quit
Czy istnieje inny sposób na zamknięcie aplikacji i nadal pozwolę Sesja gdb działa dalej lub jedynym sposobem jest surowy sposób, o którym wspomniałem powyżej.
AFAWiem, że zabicie procesu aplikacji powinno być ostatnim rozwiązaniem, a nie pierwszym.
Komentarze
Odpowiedź
Możesz użyć do tego sygnałów. Przed uruchomieniem programu skonfiguruj USR1
lub USR2
tak, aby przerywał gdb
bez wpływu na program:
handle SIGUSR1 nopass
Następnie możesz uruchomić swój program, a kiedy chcesz go zatrzymać, wykonaj kill -USR1
z inna powłoka z odpowiednim (podrzędnym) numerem pid. gdb
wstrzyma aplikację, a następnie możesz dodać punkty przerwania, sprawdzić stan itp., a jeśli chcesz, kontynuować wykonywanie za pomocą cont
.
gdb
przy ustawieniach domyślnych, Ctrl-C nie zabija aplikacji, po prostu włamuje się do debugera, w którym możesz zdecydować co zrobić. Użyjcont
do " połknąć " sygnał, a aplikacja działa bez zakłóceń. Lub użyjsignal 2
, aby przekazać SIGINT (2) do aplikacji. Lub użyjkill
, aby zamknąć aplikację.