Действительно, в среде, где у вас есть gdb, и вы компилируете свои источники с включенными символами отладки (например, -ggdb), вы можете иметь свой отладчик (например, gdb из командной строки или ddd, когда вам нужно что-то графически).
Рассмотрим этот кусок кода:
#include <string>
#include <vector>
struct test
{
int a;
float b;
std::string c;
};
int main()
{
std::vector<int> v;
test t;
t.a=1;
t.b=2.0;
t.c="hello there";
return 0;
}
При вежливом обращении к gdb он может дать мне следующий вывод:
(gdb) break 20
Breakpoint 1 at 0x8048622: file bla.cpp, line 20.
(gdb) run
Starting program: /home/edb/a.out
Breakpoint 1, main () at bla.cpp:21
21 return 0;
(gdb) print t
$1 = {a = 1, b = 2, c = {static npos = 4294967295,
_M_dataplus = {> = {> = {}, }, _M_p = 0x96b6014 "hello there"}}}
(gdb) ping v
Undefined command: "ping". Try "help".
(gdb) print v
$2 = { >> = {
_M_impl = {> = {> = {}, }, _M_start = 0x0, _M_finish = 0x0,
_M_end_of_storage = 0x0}}, }
Редактировать: обратите внимание, что эти данные доступны из контекста отладчика, для генерации этих дампов во время выполнения вам нужно предусмотреть свою собственную функцию дампа / форматирования, обычно выполняемую с помощью перегрузки оператора << в C ++. </p>