Я хочу напечатать всю длину C-строки в GDB. По умолчанию это сокращенно, как заставить GDB напечатать всю строку?
376
set print elements 0
set print elements
number-of-elements
Установите ограничение на количество элементов массива, которые GDB будет печатать. Если GDB печатает большой массив, он прекращает печать после того, как напечатает количество элементов, заданное set print elements
командой. Это ограничение также относится к отображению строк. Когда GDB запускается, этот предел устанавливается равным 200. Установка числа элементов в ноль означает, что печать не ограничена .
Пока ваша программа находится в нормальном состоянии, вы также
call (void)puts(your_string)
можете распечатать ее на стандартный вывод. Тот же принцип применим ко всем функциям, доступным отладчику.источник
Существует третий вариант: команда x, которая позволяет вам установить другое ограничение для конкретной команды вместо изменения глобального параметра. Для печати первых 300 символов строки вы можете использовать
x/300s your_string
. Вывод может быть немного сложнее для чтения. Например, печать запроса SQL приводит к:источник
x
!Команда
printf
выведет полные строки:источник
set print elements nnn
пределу, и не будет печатать всю строку, если вы этого не сделаетеset print elements 0
.Просто чтобы завершить это:
Вы должны указать длину, но можете изменить представление этой строки:
Это может быть полезно, если вы хотите отладить по их значениям
источник
Использование
set elements ...
не всегда лучший способ. Было бы полезно, если бы были разныеset string-elements ...
.Итак, я использую эти функции в моем .gdbinit:
Предостережения:
источник