Je veux imprimer toute la longueur d'une chaîne C dans GDB. Par défaut, comment est-ce que je force GDB à imprimer toute la chaîne?
set print elements 0
set print elements
number-of-elements
Définissez une limite quant au nombre d'éléments d'un tableau que GDB imprimera. Si GDB imprime un tableau de grande taille, il arrête d'imprimer après avoir imprimé le nombre d'éléments défini par la commande set print elements
. Cette limite s'applique également à l'affichage des chaînes. Au démarrage de GDB, cette limite est définie sur 200. Réglage nombre d'éléments à zéro signifie que l'impression est illimitée.
Tant que votre programme est dans un état sain, vous pouvez aussi call (void)puts(your_string)
pour l'imprimer sur la sortie standard. Le même principe s'applique à toutes les fonctions disponibles pour le débogueur, en fait.
Il existe une troisième option: la commande x, qui vous permet de définir une limite différente pour la commande spécifique au lieu de modifier un paramètre global. Pour imprimer les 300 premiers caractères d'une chaîne, vous pouvez utiliser x/300s your_string
. La sortie peut être un peu plus difficile à lire. Par exemple, l’impression d’une requête SQL entraîne:
(gdb) x/300sb stmt.c_str () 0x9cd948: "SELECT article.r" ... 0x9cd958: "owid de l'article" ... ..
La commande printf
imprimera les chaînes complètes:
(gdb) printf "%s\n", string
Juste pour le compléter:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
Vous devez donner une longueur, mais vous pouvez changer la représentation de cette chaîne:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
Cela peut être utile si vous voulez déboguer par leurs valeurs
Utiliser set elements ...
n'est pas toujours le meilleur moyen. Il serait utile qu’il y ait un set string-elements ...
distinct.
Donc, j'utilise ces fonctions dans mon .gdbinit:
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
Mises en garde: