Bagaimana cara saya melihat file CoreDump?

13

Saat melaporkan bug dari kerusakan, bug dibuat pribadi dan file bernama CoreDump.gz. Dokumentasi Bug Triage mengatakan sebagai berikut:

Jika crash masih memiliki lampiran CoreDump.gz, maka itu tidak mungkin untuk secara otomatis mendapatkan jejak stack simbolis sepenuhnya dan memeriksa duplikat.

Stacktrace.txt tampaknya dapat dibaca oleh manusia. Bagaimana saya bisa mengerti arti dari tumpukan jejak. CoreDump withing CoreDump.gz tampaknya tidak dapat dibaca manusia. Apa itu "jejak stack simbolis penuh"? Apa perbedaan antara "jejak stack simbolik penuh" Bagaimana cara melihat konten file CoreDump? (mencoba 'kucing', tetapi tidak bersih)

komputes
sumber

Jawaban:

15

Coredump.gz adalah memori (dikompresi) yang dapat diakses oleh program yang macet. Ini adalah file biner. Coredumps adalah harta karun, dengan segala macam data pribadi yang akan ditambang.

Coredumps dapat dilihat dengan menjalankan 'gdb':

gdb --core=mycoredump

Tentu saja, Anda masih membutuhkan paket debug yang terkait dengan inti ini.

Anda bisa, kemudian, membuat stacktrace dengan:

(gdb) bt

untuk menghasilkan stacktrace dari utas saat ini - tanpa resolusi parameter -, atau

(gdb) thread apply all bt full

untuk menghasilkan stacktrace dari semua thread di coredump, dengan resolusi parameter.

stacktrace dan stacktraces penuh menunjukkan aliran kontrol dalam suatu program. Untuk Python, bagian atas stacktrace menunjukkan panggilan terlama, dengan yang terbaru di bagian bawah; untuk hampir semua hal lain, bagian atas adalah panggilan terbaru, dan bagian bawah adalah yang tertua.

Stacktrace penuh tidak hanya akan menampilkan aliran, tetapi juga nilai-nilai parameter. Di sinilah kami biasanya menemukan data pribadi - misalnya, Anda melihat fungsi yang disebut "validatePassword" dengan parameter yang disebut "Kata Sandi", dan nilai "MySecretPassword" ...

Stacktraces biasanya hanya membantu jika paket debug diinstal (sehingga frame stack dapat diselesaikan menjadi sesuatu yang dapat kita baca dengan mudah). Analisis stacktrace akan membutuhkan seseorang untuk memiliki sumber yang digunakan untuk membangun instance program spesifik ini.

hggdh
sumber
CoreDump adalah file biner, tetapi bagaimana Anda melihatnya? Stacktraces hanya membantu jika paket debug diinstal, lalu mengapa apport melaporkannya sebaliknya?
komputes
1
File CoreDump tidak dimaksudkan untuk dilihat, itu dimaksudkan untuk digunakan untuk debugging di gdb. Anda perlu memiliki mesin yang menjalankan versi perangkat lunak yang sama (dan semua dependensi) menghasilkan crash dan memiliki paket debug, maka Anda dapat menggunakan apa yang diposting Carlos di atas untuk mendapatkan jejak stack.
stgraber
2
Sekarang bagaimana mengapa itu masih relevan untuk suatu paspor, itu karena paspor memiliki sekelompok "retracer" yang mengambil coredump Anda, instal paket debug pada sebuah kotak di DC dan kemudian lampirkan tumpukan penuh pada laporan bug.
stgraber
Dokumentasi Tambahan: gnu.org/software/gdb/documentation
komputes
Dokumentasi Tambahan: unknownroad.com/rtfm/gdbtut/gdbtoc.html
komputes