backtraceatau where, bahkan info lineatau sekadar bt(untuk lacak balik). dirac.org/linux/gdb untuk tutorial gdb
dwalter
btatau backtraceatau wherecetak tumpukan panggilan fungsi, fatau framecetak baris berikutnya untuk dijalankan.
Eric Wang
Jawaban:
21
Saya mendapatkan informasi yang sama saat melakukan debug. Meskipun tidak saat saya memeriksa stacktrace. Kemungkinan besar Anda akan menggunakan flag pengoptimalan menurut saya. Periksa tautan ini - sesuatu yang terkait.
Coba kompilasi dengan -g3menghapus flag optimasi apapun. Maka itu mungkin berhasil. HTH!
Ah, jadi meskipun program saya dikompilasi -guntuk memuat info debug, saya saat ini berada dalam bingkai tumpukan, diambil dari salah satu pustaka bersama, yang tampaknya tidak dikompilasi untuk memuat informasi baris. Terima kasih, kumar.
Boris Burkov
104
Perintah 'frame' akan memberi Anda apa yang Anda cari. (Ini dapat disingkat hanya 'f'). Berikut ini contohnya:
Tanpa argumen, 'frame' hanya memberi tahu Anda di mana Anda berada (dengan argumen itu mengubah frame). Informasi lebih lanjut tentang perintah frame dapat ditemukan di sini .
Ingatlah bahwa gdb adalah perintah yang kuat -mampu untuk instruksi tingkat rendah- sehingga terkait dengan konsep perakitan.
Apa yang Anda cari disebut de instruksi pointer, yaitu:
Register penunjuk instruksi menunjuk ke alamat memori yang selanjutnya akan coba dieksekusi oleh prosesor. Penunjuk instruksi disebut ip dalam mode 16-bit, eip dalam mode 32-bit, dan rip dalam mode 64-bit.
GDB tidak mendukung mode 16-bit, saya yakin, jadi iptidak pernah digunakan di sini. Juga, bukan secara eksplisit ejaan nama program counter, Anda dapat menggunakan alias GDB untuk itu: $pc. Jadi x/10i $pcakan membongkar 10 instruksi pada penunjuk instruksi saat ini terlepas dari arsitekturnya - ini akan bekerja pada i386, x86_64, ARM dll.
Ruslan
19
Perintah di mana atau bingkai dapat digunakan. dimana perintah akan memberikan lebih banyak info dengan nama fungsi
Semua jawaban di atas benar, Yang saya sukai adalah menggunakan mode tui (ctrl + XA) yang menunjukkan lokasi Anda dan fungsi di jendela terpisah yang sangat membantu pengguna. Semoga itu bisa membantu juga.
backtrace
atauwhere
, bahkaninfo line
atau sekadarbt
(untuk lacak balik). dirac.org/linux/gdb untuk tutorial gdbbt
ataubacktrace
atauwhere
cetak tumpukan panggilan fungsi,f
atauframe
cetak baris berikutnya untuk dijalankan.Jawaban:
Saya mendapatkan informasi yang sama saat melakukan debug. Meskipun tidak saat saya memeriksa stacktrace. Kemungkinan besar Anda akan menggunakan flag pengoptimalan menurut saya. Periksa tautan ini - sesuatu yang terkait.
Coba kompilasi dengan
-g3
menghapus flag optimasi apapun. Maka itu mungkin berhasil. HTH!sumber
-g
untuk memuat info debug, saya saat ini berada dalam bingkai tumpukan, diambil dari salah satu pustaka bersama, yang tampaknya tidak dikompilasi untuk memuat informasi baris. Terima kasih, kumar.Perintah 'frame' akan memberi Anda apa yang Anda cari. (Ini dapat disingkat hanya 'f'). Berikut ini contohnya:
Tanpa argumen, 'frame' hanya memberi tahu Anda di mana Anda berada (dengan argumen itu mengubah frame). Informasi lebih lanjut tentang perintah frame dapat ditemukan di sini .
sumber
Ingatlah bahwa gdb adalah perintah yang kuat -mampu untuk instruksi tingkat rendah- sehingga terkait dengan konsep perakitan.
Apa yang Anda cari disebut de instruksi pointer, yaitu:
lebih detail di sini
semua register yang tersedia pada eksekusi gdb dapat ditampilkan dengan:
dengan itu Anda dapat menemukan mode mana yang menjalankan program Anda (mencari register mana yang ada)
kemudian (di sini menggunakan rip register paling umum saat ini, ganti dengan eip atau sangat jarang ip jika perlu):
akan menunjukkan nomor baris dan sumber file
akan menunjukkan baris itu dengan beberapa sebelum dan sesudah
tapi mungkin
seharusnya cukup dalam banyak kasus.
sumber
ip
tidak pernah digunakan di sini. Juga, bukan secara eksplisit ejaan nama program counter, Anda dapat menggunakan alias GDB untuk itu:$pc
. Jadix/10i $pc
akan membongkar 10 instruksi pada penunjuk instruksi saat ini terlepas dari arsitekturnya - ini akan bekerja pada i386, x86_64, ARM dll.Perintah di mana atau bingkai dapat digunakan. dimana perintah akan memberikan lebih banyak info dengan nama fungsi
sumber
Semua jawaban di atas benar, Yang saya sukai adalah menggunakan mode tui (ctrl + XA) yang menunjukkan lokasi Anda dan fungsi di jendela terpisah yang sangat membantu pengguna. Semoga itu bisa membantu juga.
sumber