Acest lucru este oarecum legat de gdb set overwrite log on on should overwrite gdb.txt correct? .
Să spunem că rulez o sesiune a unei aplicații. De exemplu, permiteți-mi să iau din nou exemplul qbittorrent.
Așa cum a fost împărtășit înainte, așa se întâmplă o rulare –
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
un mod pe care îl știu este să ieșiți din aplicație cu grație, dar uneori aplicația se blochează / durează prea mult timp sau pur și simplu nu răspunde.
Atunci singura opțiune care rămâne la mine este folosirea CTRL+C
care, dacă înțeleg corect, ucide aplicația subiacentă , în exemplul nostru qbittorrent și apoi pot să renunț la gdb prin intermediul
(gdb) quit
Există / ar exista vreun alt mod de a părăsi aplicația și lăsa în continuare sesiunea gdb continuă să ruleze sau singura modalitate este modul brut pe care l-am menționat mai sus.
AFAI știu că eliminarea unui proces de aplicare ar trebui să fie ultima soluție și nu prima.
Comentarii
Răspuns
Puteți utiliza semnale pentru aceasta. Înainte de a începe programul, configurați USR1
sau USR2
pentru a sparge gdb
fără a afecta program:
handle SIGUSR1 nopass
Apoi puteți rula programul și când trebuie să îl opriți, rulați kill -USR1
de la o altă coajă cu pidul adecvat (copil). gdb
va întrerupe aplicația și puteți adăuga apoi puncte de întrerupere, examina starea etc. și, dacă doriți, continuați executarea cu cont
.
gdb
sub setările implicite, Ctrl-C nu ucide aplicația, ci doar intră în depanator, unde puteți decide ce trebuie să faceți. Utilizațicont
pentru a " înghite " semnalul și aplicația continuă netulburată. Sau utilizațisignal 2
pentru a transmite SIGINT (2) aplicației. Sau utilizațikill
pentru a distruge aplicația.