2010-04-21 2 views
12

У меня есть std :: map < std :: string, std :: string> cont;Как напечатать std :: значение карты в gdb

Я хочу видеть cont ["some_key"] в gdb. Когда я пытаюсь

р прод [ «some_ket»]

Я получаю это сообщение: Один из аргументов вы пытались передать оператору [] не может быть превращена в то, что хочет функция.

Я использую GNU gdb Red Hat Linux (6.3.0.0-1.162.el4rh). Спасибо

+3

Жаль. gdb7.0 может напрямую распечатать его: http://sourceware.org/gdb/wiki/STLSupport –

+0

Это правильный ответ. Функция уже существует, вы используете только старый дистрибутив, который не интегрировал его. Подумайте об использовании недавней Fedora или создайте инструменты (это может быть просто gdb, хотя, возможно, вам понадобятся g ++ и binutils) из источника. –

ответ

6

В последней версии gdb имеется поддержка python, так что вы можете легко написать функцию для распечатки содержимого любой stl-структуры. Однако вам придется изучить API и написать сценарий. К счастью, gcc 4.5 будет поставляться с необходимыми сценариями python, чтобы получить gdb для интеллектуального управления stl-структурами данных.

EDIT: вам не нужно ждать GCC 4.5 (который, кстати, уже выпущен), вы можете просто grab the code from SVN.

1

Gdb не понимает перегрузку оператора C++.

+0

Насколько я понимаю, нет способа узнать значение ключа во время процесса отладки? –

+0

Не легко. std :: map - сложная структура данных. Вы можете следить за частными членами (конкретными конкретными конкретными задачами) и видеть, что происходит, но это довольно тяжелая работа. @ Ответ Эдди может помочь, но я вообще не играл с этим. –

6

Вы можете написать свои собственные функции дампа и называть их:

(gdb) call dump(m) 

см эту тему: http://www.mail-archive.com/[email protected]/msg02109.html

Я любопытный о вспомогательных макросов GDB.

+1

[следующее сообщение в этой теме] (http://www.mail-archive.com/[email protected]/msg02189.html) показывает макрос GDB, который работает очень хорошо. В последующем сообщении содержатся некоторые небольшие улучшения. – mMontu

Смежные вопросы