Yanıtlar:
set print elements 0
set print elements
number-of-elements
GDB dizisinin kaç öğesinin yazdırılacağı konusunda bir sınır belirleyin. GDB büyük bir dizi yazdırıyorsa, set print elements
komut tarafından ayarlanan sayıda öğe yazdırdıktan sonra yazdırmayı durdurur . Bu sınır dizelerin görüntülenmesi için de geçerlidir. GDB başladığında, bu sınırı 200 olarak ayarlanır Ayar numarası-of-the elemanları baskı sınırsız olduğunu sıfır araçlarına .
Programınız aklı başında olduğu sürece, call (void)puts(your_string)
stdout'a da yazdırabilirsiniz. Aynı ilke, hata ayıklayıcı tarafından kullanılabilen tüm işlevler için de geçerlidir.
Üçüncü bir seçenek daha vardır: Genel bir ayarı değiştirmek yerine belirli komut için farklı bir sınır belirlemenize izin veren x komutu. Bir dizenin ilk 300 karakterini yazdırmak için kullanabilirsiniz x/300s your_string
. Çıktıyı okumak biraz daha zor olabilir. Örneğin, bir SQL sorgusu yazdırıldığında şunlar ortaya çıkar:
(gdb) x / 300sb stmt.c_str () 0x9cd948: "SELECT article.r" ... 0x9cd958: "mahalleden borçlu" ... ..
x
!
printf
Komut tam dizeleri yazacaktır:
(gdb) printf "%s\n", string
set print elements nnn
sınıra uyuyor gibi görünüyor ve siz bunu yapmadığınız sürece dizenin tamamını yazdırmayacak set print elements 0
.
Sadece tamamlamak için:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
Bir uzunluk vermelisiniz, ancak bu dizenin temsilini değiştirebilirsiniz:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
Değerlerine göre hata ayıklamak istiyorsanız bu yararlı olabilir
Kullanmak set elements ...
her zaman en iyi yol değildir. Farklı olsaydı faydalı olurdu set string-elements ...
.
Bu nedenle, .gdbinit içinde bu işlevleri kullanın:
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
Uyarılar: