Jak wyświetlić plik CoreDump?

13

Zgłaszając błąd po awarii, błąd zostaje ustawiony jako prywatny i plik o nazwie CoreDump.gz. Dokumentacja Bug Triage mówi:

Jeśli awaria nadal ma załącznik CoreDump.gz, nie było możliwe automatyczne pobranie w pełni symbolicznego śledzenia stosu i sprawdzenie duplikatów.

Stacktrace.txt wydaje się czytelny dla człowieka. Jak mogę zrozumieć znaczenie śladu stosu. CoreDump z CoreDump.gz nie wydaje się czytelny dla człowieka. Co to jest „w pełni symboliczny ślad stosu”? Jaka jest różnica między „w pełni symbolicznym śladem stosu” Jak wyświetlić zawartość pliku CoreDump? (próbowałem „kota”, ale nie jest czyste)

komputy
źródło

Odpowiedzi:

15

Coredump.gz to (skompresowana) pamięć dostępna dla programu, który się zawiesił. Jest to plik binarny. Coredumps to skarbnica, w której wydobywane są wszelkiego rodzaju prywatne dane.

Coredumps można wyświetlić, uruchamiając „gdb”:

gdb --core=mycoredump

Oczywiście nadal będziesz potrzebować pakietów debugowania powiązanych z tym rdzeniem.

Następnie możesz wygenerować śledzenie stosu poprzez:

(gdb) bt

aby wygenerować ślad stosu bieżącego wątku - bez rozdzielczości parametru - lub

(gdb) thread apply all bt full

do generowania śledzenia wszystkich wątków w rdzeniu rdzeniowym z rozdzielczością parametrów.

stacktrace i pełne stacktrace pokazują przepływ sterowania w programie. W przypadku Pythona górna część stacktrace pokazuje najstarsze wywołanie, a najnowsze na dole; dla prawie wszystkiego innego, górna część to najnowsze połączenie, a dolna najstarsza.

Pełny stacktrace pokaże nie tylko przepływ, ale także wartości parametru. W tym miejscu zwykle znajdujemy prywatne dane - na przykład powiedzmy, że widzisz funkcję o nazwie „validatePassword” z parametrem o nazwie „Password” i wartością „MySecretPassword” ...

Stacktrace są zwykle pomocne tylko wtedy, gdy zainstalowane są pakiety debugowania (aby ramki stosu można było przekształcić w coś, co możemy łatwo odczytać). Analiza stacktrace będzie wymagać posiadania źródeł, które zostały użyte do zbudowania tej konkretnej instancji programu.

hggdh
źródło
CoreDump to plik binarny, ale jak go wyświetlić? Stacktrace są pomocne tylko wtedy, gdy zainstalowane są pakiety debugowania, dlaczego więc apport zgłasza to inaczej?
komputuje
1
Plik CoreDump nie jest przeznaczony do przeglądania, służy do debugowania w gdb. Musisz mieć maszynę z tą samą wersją oprogramowania (i wszystkimi zależnościami) generującą awarię i posiadającą pakiety debugowania, a następnie możesz użyć tego, co Carlos napisał powyżej, aby uzyskać ślad stosu.
stgraber 30.09.11
2
Jeśli chodzi o to, dlaczego nadal ma znaczenie dla apport, to dlatego, że apport ma kilka „retracerów”, które chwytają twoją rdzeń, instalują pakiety debugowania na pudełku w DC, a następnie dołączają pełny stos wyciągu do raportu o błędzie.
stgraber 30.09.11
Dokumentacja dodatkowa: gnu.org/software/gdb/documentation
komputes 30.09.11
Dokumentacja dodatkowa: unknownroad.com/rtfm/gdbtut/gdbtoc.html
komputes