вложенные классы в GDB - PullRequest
       6

вложенные классы в GDB

1 голос
/ 04 января 2012

В моей программе на C ++ у меня есть вложенный класс, определенный следующим образом:

class A {

  class B {
    // ...
  }

  // ...
}

Когда я пытаюсь привести указатель в GDB следующим образом: set $b = (A::B*)p Я получаю «Синтаксическая ошибка в выражении»

Я не знаком с символьной (или отладочной) информацией, хранящейся в файлах ELF. Мне интересно, что не так с моим приведением здесь и как ссылаться на вложенный класс в GDB.

Ответы [ 2 ]

2 голосов
/ 13 июня 2013

Ответ заключается в том, чтобы заключить имя класса в одинарные кавычки:

set $b = ('A::B'*)p

См. http://sourceware.org/bugzilla/show_bug.cgi?id=8693

1 голос
/ 04 января 2012

У меня работает (с использованием текущей CVS GDB, а также 7.3.1):

$ cat t.cc
struct A {
  struct B {
    int x;
  };
  int y;
};

int main()
{
  A::B ab, *p = &ab;
  return 0;
}

$ gcc -g t.cc && gdb -q ./a.out
(gdb) b main
Breakpoint 1 at 0x4005b8: file t.cc, line 10.
(gdb) r

Breakpoint 1, main () at t.cc:10
10    A::B ab, *p = &ab;
(gdb) p (A::B*)0x1
$1 = (A::B *) 0x1
(gdb) set $a =  (A::B*)0x1
(gdb) p $a
$2 = (A::B *) 0x1
(gdb) quit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...