Я хочу надрукувати всю довжину C-рядка в GDB. За замовчуванням його скорочують, як я змушу GDB надрукувати весь рядок?
Я хочу надрукувати всю довжину C-рядка в GDB. За замовчуванням його скорочують, як я змушу GDB надрукувати весь рядок?
Відповіді:
set print elements 0
set print elements
number-of-elements
Встановіть обмеження на кількість елементів масиву GDB, який буде надруковано. Якщо GDB друкує великий масив, він припиняє друкувати після того, як надрукував кількість елементів, встановлених set print elements
командою. Ця межа також стосується відображення рядків. Коли GDB починається, цей ліміт встановлюється на 200. Якщо встановити кількість елементів у нуль, це означає, що друк необмежений .
Поки ваша програма перебуває в нормальному стані, ви також call (void)puts(your_string)
можете роздрукувати її до stdout. Цей же принцип діє і для всіх функцій, доступних фактично для налагоджувача.
Є третій варіант: команда x, яка дозволяє встановити інший ліміт для конкретної команди замість зміни глобальної настройки. Для друку перших 300 символів рядка ви можете використовуватиx/300s your_string
. Висновок може бути трохи важче читати. Наприклад, друк SQL запиту призводить до:
(gdb) x / 300sb stmt.c_str () 0x9cd948: "ВИБРАТИ article.r" ... 0x9cd958: "ВІД Артикул" ... ..
x
!
printf
Команда буде друкувати повні рядки:
(gdb) printf "%s\n", string
set print elements nnn
ліміту, і не надрукує повний рядок, якщо ви цього не зробите set print elements 0
.
Просто для завершення:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
Ви повинні вказати довжину, але може змінити подання цієї рядки:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
Це може бути корисно, якщо ви хочете налагодити їх значення
Використання set elements ...
не завжди є найкращим способом. Було б корисно, якби були виразні set string-elements ...
.
Отже, я використовую ці функції у своєму .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
Застереження: