GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menganalisis file dump inti program dengan GDB ketika memiliki parameter baris perintah?

Anda dapat menggunakan inti dengan GDB dalam banyak cara, tetapi meneruskan parameter yang akan diteruskan ke file yang dapat dieksekusi ke GDB bukanlah cara untuk menggunakan file inti. Ini juga bisa menjadi alasan Anda mendapatkan kesalahan itu. Anda dapat menggunakan file inti dengan cara berikut:

gdb <executable> <core-file> atau gdb <executable> -c <core-file> atau

gdb <executable>
...
(gdb) core <core-file>

Saat menggunakan file inti Anda tidak harus memberikan argumen. Skenario macet ditampilkan di GDB (diperiksa dengan GDB versi 7.1 di Ubuntu).

Misalnya:

$ ./crash -p param1 -o param2
Segmentation fault (core dumped)
$ gdb ./crash core
GNU gdb (GDB) 7.1-ubuntu
...
Core was generated by `./crash -p param1 -o param2'. <<<<< See this line shows crash scenario
Program terminated with signal 11, Segmentation fault.
#0  __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99    ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)

Jika Anda ingin meneruskan parameter ke executable untuk di-debug di GDB, gunakan --args .

Misalnya:

$ gdb --args ./crash -p param1 -o param2
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) r
Starting program: /home/@@@@/crash -p param1 -o param2

Program received signal SIGSEGV, Segmentation fault.
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99    ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)

Halaman manual akan sangat membantu untuk melihat opsi GDB lainnya.


Penggunaan sederhana GDB, untuk men-debug file coredump:

gdb <executable_path> <coredump_file_path>

File coredump untuk "proses" dibuat sebagai file "core.pid".

Setelah Anda masuk ke dalam prompt GDB (saat menjalankan perintah di atas), ketik:

...
(gdb) where

Ini akan memberi Anda informasi, tentang tumpukan, tempat Anda dapat menganalisis penyebab crash/kesalahan.Perintah lainnya, untuk tujuan yang sama adalah:

...
(gdb) bt full

Ini sama seperti di atas. Dengan konvensi, ini mencantumkan seluruh informasi tumpukan (yang pada akhirnya mengarah ke lokasi kerusakan).


Lewati saja parameternya. GDB tidak membutuhkannya:

gdb ./exe core.pid

Linux
  1. Cara Debug Program C menggunakan gdb dalam 6 Langkah Sederhana

  2. Bagaimana cara mengisi file dengan FF menggunakan dd?

  3. Bagaimana cara mendapatkan file dengan nama yang benar saat dialihkan?

  1. Kenapa tidak ada dump inti yang dibuat ketika aplikasi memiliki SUID yang disetel?

  2. Bagaimana cara mengatur lokasi file dump inti (dan nama)?

  3. Cara melihat file Core (umum)

  1. Bagaimana Cara Mengarahkan Output Program Ke File Zip??

  2. Bagaimana Cara Mengatur Parameter Saat Pipa Bash Script Ke Bash?

  3. Bagaimana cara menghapus file .fuse_hidden*?