Saya sedang melakukan debugging tingkat perakitan di GDB. Apakah ada cara untuk mendapatkan GDB untuk menunjukkan kepada saya instruksi perakitan saat ini dengan cara yang sama yang menunjukkan baris sumber saat ini? Output default setelah setiap perintah terlihat seperti ini:
0x0001433f 990 Foo::bar(p);
Ini memberi saya alamat instruksi saat ini, tetapi saya harus tetap merujuk kembali ke output disassemble
untuk melihat instruksi yang sedang saya jalankan.
Jawaban:
Anda dapat beralih ke tata letak perakitan di GDB:
Lihat di sini untuk informasi lebih lanjut. Instruksi perakitan saat ini akan ditampilkan di jendela assembler.
sumber
layout regs
tui reg vector
menunjukkan regs vektor, bukan regs integer. (Namun, tidak selalu dapat digunakan, karena tidak memungkinkan Anda memilih hanya.v8_int16
atau sesuatu, sehingga tampilannya berantakan.) Lihat wiki tag x86 untuk tutorial cepat untuk debugging asm.si
), dan fitur apa yang tidak berguna (viewport yang tidak menampilkan informasi yang diperlukan). Tidak masuk akal memilih jawaban ini karena Anda hanya pembawa pesan ...·layout src
untuk melihat kode sumber saat debugging, dan juga patut diingat untuk keluar dari mode ini olehCTRL+x+a
Anda dapat melakukan
dan setiap kali GDB berhenti, itu akan menampilkan pembongkaran instruksi berikutnya.
GDB-7.0
juga mendukungset disassemble-next-line on
, yang akan membongkar seluruh baris berikutnya, dan memberi Anda lebih banyak konteks pembongkaran.sumber
si
(tetapi tidaks
)?Perintah
dapat diatur untuk berjalan sepanjang waktu menggunakan mekanisme konfigurasi yang biasa.
sumber
x/ni $pc
untuk melihat n instruksi selanjutnya, yang seringkali cukup bermanfaat.Mengatur opsi berikut:
Akan memberi Anda hasil yang terlihat seperti ini:
sumber
Jika Anda ingin beberapa instruksi berikutnya ditampilkan secara otomatis saat melangkah melalui program ini, Anda dapat menggunakan perintah tampilan sebagai berikut -
display /3i $pc
Di atas akan menampilkan 3 instruksi setiap kali breakpoint terkena atau ketika Anda satu langkah program.
Lebih detail di entri blog di sini .
sumber
Dari dalam gdb, tekan
Ctrl
x
2
dan layar akan terbagi menjadi 3 bagian.Bagian pertama akan menunjukkan kepada Anda kode normal dalam bahasa tingkat tinggi.
Kedua akan menunjukkan padanan yang setara dan sesuai
instruction Pointer
.Ketiga akan memberi Anda
gdb
prompt normal untuk memasukkan perintah.sumber
Ctrl-X 2
, tetapi sepertinyagdb -tui
mode, yang sangat bagus.layout split
dari gdb prompt.Dasbor GDB
https://github.com/cyrus-and/gdb-dashboard
Konfigurasi GDB ini menggunakan API GDB Python resmi untuk menunjukkan kepada kita apa pun yang kita inginkan setiap kali GDB berhenti setelah misalnya
next
, seperti TUI.Namun saya telah menemukan bahwa implementasi ini adalah alternatif yang lebih kuat dan dapat dikonfigurasi untuk mode TUI GDB built-in seperti yang dijelaskan di: gdb split view dengan kode
Misalnya, kita bisa mengonfigurasi Dasbor GDB untuk menampilkan pembongkaran, sumber, register, dan tumpukan dengan:
Inilah yang terlihat jika Anda mengaktifkan semua tampilan yang tersedia sebagai gantinya:
Pertanyaan-pertanyaan Terkait:
sumber