Конфликт имени переменной с отладчиком GDB - PullRequest
3 голосов
/ 11 февраля 2010

Я отлаживаю программу C ++ с помощью GDB в Linux, и мне нужно видеть значение переменной-члена во время работы программы. Переменная-член, к сожалению, называется list, что является ключевым словом GDB. Поэтому, когда я пытаюсь:

print m_operations.m_data[10].m_data.list

Я получаю ...

A syntax error in expression, near list'.

Я пытался всевозможными способами указать GDB, что я ввожу буквальное выражение, например помещая двойные или одинарные кавычки вокруг имени переменной, но это просто приводит к большему количеству синтаксических ошибок. Я посмотрел в руководстве GDB и не могу найти ничего, чтобы решить эту проблему. Я не могу переименовать переменную-член, потому что я не уполномочен изменять этот класс. Более того, list - это объект C ++, а не обычное целое число или POD, поэтому я не могу просто использовать ключевое слово x, чтобы исследовать память там ... по крайней мере, не потратив серьезного времени на расшифровку того, что является необработанным двоичным файлом представляет.

Итак, есть предложения, чтобы решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2010

Проблема не в том, что вы думаете - если я отлаживаю следующий код:

int main() {
    int list = 666;
    while( list ) {
        list--;
    }
}

Я могу разбить третью строку и сказать:

(gdb) print list

, что дает мне:

$1 = 666

Должно быть что-то не так с выражением, которое вы пытаетесь напечатать. Вы пробовали использовать отладчик с графическим интерфейсом, например DDD , который позволит вам выбрать, что вы хотите напечатать, щелкнув мышью?

1 голос
/ 12 февраля 2010

Скорее всего, это ошибка в GDB (или, возможно, в GCC).

Сначала попробуйте последнюю версию GDB (7.0.1).

Если это не удастся, попробуйте создать простой автономный тестовый пример и отправить ошибку в GDB bugzilla Если вы сделаете это, обязательно сообщит, какая версия GCC использовалась для компиляции вашего теста.

...