Как я печатаю элементы вектора C++ в GDB?

203
задан John Carter 28 July 2011 в 21:47
поделиться

3 ответа

Действительно ли EmailHandler является полным именем вашего класса сервлетов, т.е. он не находится в таком пакете, как com.something.EmailHandler ? Он должен быть полностью определен в файле web.xml .

-121--2768766-

Необходимо закрыть XML с помощью , а не с помощью < web-app > .

-121--2768764-

Чтобы просмотреть содержимое вектора std:: vector myVector, просто введите GDB:

(gdb) print myVector

Это приведет к выходу, подобному:

$1 = std::vector of length 3, capacity 4 = {10, 20, 30}

Чтобы достичь выше, необходимо иметь gdb 7 (я протестировал его на gdb 7.01) и некоторые python довольно-printer. Процесс их установки описан на gdb wiki .

Более того, после установки выше, это хорошо работает с Eclipse C++ GUI отладчика (и любой другой среды IDE, использующей GDB, как мне кажется).

74
ответ дан 23 November 2019 в 04:57
поделиться

С GCC 4.1.2, для печати всего станд.:: vector< int> названный myVector, сделайте следующее:

print *(myVector._M_impl._M_start)@myVector.size()

Для печати только первых элементов N сделайте:

print *(myVector._M_impl._M_start)@N

Объяснение

Это, вероятно, в большой степени зависит от Вашей версии компилятора, но для GCC 4.1.2, указатель на внутренний массив:

myVector._M_impl._M_start 

И команда GDB для печати элементов N массива, запускающегося в указателе, P:

print P@N

Или, в краткой форме (для стандарта .gdbinit):

p P@N
251
ответ дан gagallo7 23 November 2019 в 04:57
поделиться

'Наблюдение' контейнеров STL, в то время как отладка является своего рода проблемой. Вот 3 различных решения, которые я использовал в прошлом, ни один из них не прекрасен.

1) Использование сценарии GDB от http://clith.com/gdb_stl_utils/ Эти сценарии позволяют Вам печатать содержание почти всех контейнеров STL. Проблема состоит в том, что это не работает на вложенные контейнеры как стопка наборов.

2) Visual Studio 2005 имеет фантастическую поддержку наблюдения контейнеров STL. Это работает на вложенные контейнеры, но это для их реализации для STL только и не работает при помещении контейнера STL в контейнер Повышения.

3) Запись Ваша собственная функция 'печати' (или метод) для определенного объекта Вы хотите распечатать при отладке и использование 'вызов' в то время как в GDB для печати объекта. Обратите внимание, что, если Ваша функция печати не вызывается нигде в коде g ++, сделает, устранение мертвого кода и функция 'печати' не будут найдены GDB (Вы получите сообщение, говоря, что функция встраивается). Так компилируют с - fkeep-подставляемые-функции

14
ответ дан Gustavo Maciel 23 November 2019 в 04:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: