Gdb drukuje do pliku zamiast na standardowe wyjście


104

Uruchamiam gdb i chcę zbadać jeden z tych niefortunnych obiektów bogów. Potrzeba wielu stron (a mam monitor 24 "obrócony na bok!), Aby zobaczyć całość. Dla ułatwienia chciałbym, aby gdb wydrukowało obiekt do pliku zamiast na ekranie, abym mógł go otworzyć w vi i poruszaj się z łatwością. Przy całej wszechstronności gdb musi istnieć sposób, aby to zrobić, prawda?

Odpowiedzi:


151

Musisz włączyć logowanie.

(gdb) set logging on

Możesz powiedzieć, którego pliku użyć.

(gdb) set logging file my_god_object.log

Możesz sprawdzić aktualną konfigurację logowania.

(gdb) show logging

15
A jeśli chcesz, aby dane wyjściowe trafiały tylko do pliku dziennika, użyj set logging redirect on.
Ben C,

5
Czy nie powinniśmy ustawić set logging file my_god_object.logwcześniej set logging on?
Herpes Free Engineer

To plus tail -fi awkbył dzisiaj bardzo pomocny. Dzięki!
remikes

12

Odkryłem, że możesz przekierować dane wyjściowe z gdb do pliku za pomocą runpolecenia:

(gdb) run > outfile

11
Byłby to wynik debugowanego programu, a nie sam plik gdb. OP chciał logować własne wyjście gdb.
Paweł


@thepaul, ale jest to w rzeczywistości bardzo przydatne, ponieważ debuguję program QT, który po prostu kasuje stdin gdb za pomocą śmieci
QDebug

@ rostamn739 oops, w ogóle nie pomogło
rostamn739

12

Rozszerzanie odpowiedzi @ qubodup

gdb core.3599 -ex bt -ex quit |& tee backtrace.log

-exprzełącznik uruchamia komendę gdb. Więc powyższe ładuje plik core, uruchamia btpolecenie, a następnie quitpolecenie. Dane wyjściowe są zapisywane backtrace.logna ekranie, a także na ekranie.

Innym użytecznym wywołaniem gdb (dającym śledzenie stosu ze zmiennymi lokalnymi ze wszystkich wątków) jest

gdb core.3599 -ex 'thread apply all bt full' -ex quit

W niektórych systemach należy wpisaćgdb -c core.3599 ...
user7610

1
> gdb core. 3599 -ex 'wątek zastosuj wszystkie bt full' -ex quit Dodaj --batch, aby uruchomić bez zachęty -eg sudo gdb --batch core. 3599 -ex 'wątek zastosuj wszystkie bt full' -ex quit> output .log
David Skelly,

9

Z https://sourceware.org/gdb/onlinedocs/gdb/Logging-Output.html :

Możesz chcieć zapisać dane wyjściowe poleceń gdb do pliku. Istnieje kilka poleceń sterujących rejestrowaniem GDB.

set logging on

Włącz logowanie.

set logging off

Wyłącz logowanie.

set logging file file

Zmień nazwę bieżącego pliku dziennika. Domyślny plik dziennika to gdb.txt.

set logging overwrite [on|off]

Domyślnie gdb dołączy do pliku dziennika. Ustaw nadpisywanie, jeśli chcesz ustawić logowanie, aby zamiast tego nadpisywać plik dziennika.

set logging redirect [on|off]

Domyślnie dane wyjściowe gdb trafiają zarówno do terminala, jak i do pliku dziennika. Ustaw przekierowanie, jeśli chcesz, aby dane wyjściowe trafiały tylko do pliku dziennika.

show logging

Pokaż aktualne wartości ustawień rejestrowania.



5

Prostą metodą logowania gdb do pliku przy jednoczesnym wyświetlaniu danych wyjściowych (co ułatwia pisanie poleceń) jest użycie tee:

gdb command |& tee gdb.log

1

Chociaż jest tu wiele dobrych odpowiedzi, nadal muszę opublikować jedyną rzecz, która zadziałała:

[niko@my-laptop]# gdb MyBinary 2>&1 log.txt

To był jedyny sposób na pobranie gdb i binarnych danych wyjściowych do tego samego pliku log.txt, jednocześnie wyświetlając go na konsoli.

EDYTOWAĆ:

Przestroga: Wydaje się, że dane wyjściowe nie są częściowo zsynchronizowane między wyjściem gdb a wyjściem binarnym. Czy ktoś może potwierdzić? Możesz chcieć sprawdzić, czy twój klient telnet / ssh ma funkcję rejestrowania danych wyjściowych, które widzisz w konsoli.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.