Saya ingin mencetak panjang penuh C-string di GDB. Secara default disingkat, bagaimana cara memaksa GDB untuk mencetak seluruh string?
Saya ingin mencetak panjang penuh C-string di GDB. Secara default disingkat, bagaimana cara memaksa GDB untuk mencetak seluruh string?
Jawaban:
set print elements 0
set print elements
number-of-elements
Tetapkan batas pada berapa banyak elemen dari array yang akan dicetak oleh GDB. Jika GDB mencetak array besar, itu berhenti mencetak setelah telah mencetak jumlah elemen yang ditetapkan oleh set print elements
perintah. Batas ini juga berlaku untuk tampilan string. Ketika GDB dimulai, batas ini diatur ke 200. Mengatur jumlah elemen ke nol berarti bahwa pencetakan tidak terbatas .
Selama program Anda dalam keadaan waras, Anda juga call (void)puts(your_string)
dapat mencetaknya ke stdout. Prinsip yang sama berlaku untuk semua fungsi yang tersedia untuk debugger, sebenarnya.
Ada opsi ketiga: perintah x, yang memungkinkan Anda untuk menetapkan batas berbeda untuk perintah tertentu alih-alih mengubah pengaturan global. Untuk mencetak 300 karakter pertama dari sebuah string yang dapat Anda gunakan x/300s your_string
. Outputnya mungkin sedikit lebih sulit untuk dibaca. Misalnya mencetak hasil query SQL di:
(gdb) x / 300sb stmt.c_str () 0x9cd948: "SELECT article.r" ... 0x9cd958: "owid FROM articl" ... ..
x
!
The printf
perintah akan mencetak string lengkap:
(gdb) printf "%s\n", string
set print elements nnn
batas, dan tidak akan mencetak string yang lengkap kecuali Anda melakukannya set print elements 0
.
Hanya untuk melengkapinya:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
Anda harus memberi panjang, tetapi dapat mengubah representasi string itu:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
Ini mungkin berguna jika Anda ingin men-debug berdasarkan nilainya
Menggunakan set elements ...
tidak selalu merupakan cara terbaik. Akan bermanfaat jika ada yang berbeda set string-elements ...
.
Jadi, saya menggunakan fungsi-fungsi ini di .gdbinit saya:
define pstr
ptype $arg0._M_dataplus._M_p
printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end
define pcstr
ptype $arg0
printf "[%d] = %s\n", strlen($arg0), $arg0
end
Peringatan: