как напечатать полное значение длинной строки в gdb?

<p>я хочу напечатать всю длину c-строки в gdb. по умолчанию это сокращенно, как заставить gdb напечатать всю строку?</p>

<pre><code>set print elements 0 </code></pre><p> <a href="http://ftp.gnu.org/old-gnu/manuals/gdb-5.1.1/html\_node/gdb\_57.html#idx353">из руководства gdb</a> :</p><blockquote><code>set print elements</code> <i><code>number-of-elements</code></i></blockquote><blockquote>установите ограничение на количество элементов массива, которые gdb будет печатать. если gdb печатает большой массив, он прекращает печать после того, как напечатает количество элементов, заданное командой <code>set print elements</code>. это ограничение также относится к отображению строк. когда gdb запускается, этот предел устанавливается на 200. <b>настройка <i>число-элементов</i> ноль означает, что печать не ограничена</b>,.</blockquote>

<p>пока ваша программа находится в нормальном состоянии, вы также можете <code>call (void)puts(your\_string)</code> распечатать ее на стандартный вывод. этот же принцип применим ко всем функциям, доступным отладчику.</p>

<p>существует третий вариант: команда x, которая позволяет вам установить другое ограничение для конкретной команды вместо изменения глобального параметра. для печати первых 300 символов строки вы можете использовать <code>x/300s your\_string</code>. вывод может быть немного сложнее для чтения. например, печать запроса sql приводит к:</p><pre> (gdb) x/300sb stmt.c\_str () 0x9cd948: "выбрать article.r" ... 0x9cd958: "должен быть из статьи" ... .. </pre>

<p>команда <code>printf</code> напечатает полные строки:</p><pre><code>(gdb) printf "%s\n", string </code></pre>

<p>просто чтобы завершить это:</p><pre><code>(gdb) p (char[10]) *($ebx) $87 = "asdfasdfe\n" </code></pre><p>вы должны указать длину, но можете изменить представление этой строки:</p><pre><code>(gdb) p/x (char[10]) *($ebx) $90 = {0x61, 0x73, 0x64, 0x66, 0x61, 0x73, 0x64, 0x66, 0x65, 0xa} </code></pre><p>это может быть полезно, если вы хотите отладить по их значениям</p>

<p>использование <code>set elements ...</code> не всегда лучший способ. было бы полезно, если бы был отдельный <code>set string-elements ...</code>.</p><p>итак, я использую эти функции в моем .gdbinit:</p><pre><code>define pstr ptype $arg0._m_dataplus._m_p printf "[%d] = %sn", $arg0.\_m\_string\_length, $arg0._m_dataplus._m_p end define pcstr ptype $arg0 printf "[%d] = %s\n", strlen($arg0), $arg0 end </code></pre><p>предостережения:</p><ul> <li>первая зависит от c ++ lib, так как она обращается к членам std :: string, но легко настраивается.</li> <li>второй можно использовать только в запущенной программе, так как он вызывает strlen.</li> </ul>