Jak wydrukować pełną wartość długiego ciągu w gdb?
Chcę wydrukować pełną długość ciągu C w GDB. Domyślnie jest skracany, jak wymusić na GDB wydrukowanie całego ciągu?
6 answers
set print elements 0
set print elements
number-of-elements
Ustawia limit liczby elementów tablicy, które będą drukowane przez GDB. Jeśli GDB drukuje dużą tablicę, przestaje drukować po wydrukowaniu liczby elementów ustawionej przez polecenie set print elements
. Ograniczenie to dotyczy również wyświetlania ciągów znaków. Po uruchomieniu GDB limit ten jest ustawiony na 200. ustawienie liczby elementów na zero oznacza, że drukowanie jest nieograniczone.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-29 21:58:38
Tak długo, jak Twój program jest w stanie zdrowym, możesz również call (void)puts(your_string)
wydrukować go na stdout. Ta sama zasada dotyczy wszystkich funkcji dostępnych dla debuggera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-31 10:42:56
Istnieje trzecia opcja: polecenie x, które pozwala ustawić inny limit dla konkretnego polecenia zamiast zmieniać ustawienia globalne. Aby wydrukować pierwsze 300 znaków ciągu można użyć x/300s your_string
. Wynik może być nieco trudniejszy do odczytania. Na przykład wydrukowanie zapytania SQL powoduje:
(gdb) x/300sb stmt.c_str() 0x9cd948: "SELECT article.r"... 0x9cd958: "owid FROM articl"... ..
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-06 16:15:39
Polecenie printf
wyświetli pełne ciągi znaków:
(gdb) printf "%s\n", string
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 09:17:32
Tylko do uzupełnienia:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
Musisz podać długość, ale możesz zmienić reprezentację tego ciągu:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
To może być przydatne, jeśli chcesz debugować według ich wartości
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-18 11:05:52
Używanie {[1] }nie zawsze jest najlepszym sposobem. Przydałoby się, gdyby istniały odrębne set string-elements ...
.
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
Zastrzeżenia:
- pierwszy jest zależny od C++ lib, ponieważ uzyskuje dostęp do elementów std::string, ale można go łatwo dostosować.
- drugi może być używany tylko w uruchomionym programie, ponieważ wywołuje strlen.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 07:08:33