Доступ к шаблонным переменным C ++ в GDB - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь отладить дамп ядра и хочу получить доступ к переменным, реализованным с использованием шаблонных классов в C ++.

Я взял objdump символов в моем исполняемом файле, который имеет следующее как один из символов hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray

но когда я пытаюсь получить доступ к этой переменной в gdb, она выдает следующую ошибку:

(gdb) p hmapnspace::HandleMapParameters<(hmapnspace::HandleType)1>::m_arHandleArray
No type "HandleMapParameters<(hmapnspace::HandleType)1>" within class or namespace "hmapnspace".

Как мне правильно получить доступ к этой переменной?

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Время от времени у gdb появляются странные представления об именах в программах на C ++. Чтобы преодолеть, попробуйте набрать

print 'hmapnspace::HandleMapPar

и нажмите Tab для завершения (обратите внимание на одинарную кавычку, вы должны использовать ее).

Вы также можете определить адрес переменной и сказать что-то вроде

print *(int*) 0xdeadbabe

Удобно, когда вам нужно посмотреть значение, имя которого находится вне области действия.

1 голос
/ 01 марта 2012

Я так понимаю, это статическая переменная-член. Если нет, то вы в правильном контексте (фрейме)?

Вы нажимали клавишу Tab, как n.m. предложил? Я заметил, что GDB не очень хорошо обрабатывает типизацию в командной строке.

Наконец, последние версии GDB (например, 7.2) обрабатывают шаблоны намного лучше, чем более ранние версии. Например, теперь вы можете легко устанавливать точки останова внутри функции шаблона или класса шаблона, и GDB соответствующим образом помещает точки останова во все версии шаблона функции. Однако я не знаю, применимы ли эти улучшения GDB к тому, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...