2011-07-31 10 views
7

Mam klasy wygląda następująco:Ustaw breakpoint na nie funkcji składowej klasy udanej

namespace madoka 
{ 
class polarizable_sites 
{ 
public: 
void resize(const size_t dim_); 
void clear(void); 
}; 
} 

w gdb, mogę ustawić punkt przerwania na jasne

b 'madoka::polarizable_sites::clear()' 

jednak dla państw funkcja Resize, Nie działa

. GDB zgłoszony błąd:

the class madoka::polarizable_sites does not have any method named resize(const size_t) Hint: try 'madoka::polarizable_sites::resize(const size_t)' or 'madoka::polarizable_sites::resize(const size_t)' (Note leading single quote.)

Zastanawiam się, dlaczego, ponieważ styl funkcji jest automatycznie uzupełniany przez TAB.

BTW: Używam GDB

GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc.

z kompilatora '

g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 Copyright (C) 2010 Free Software Foundation, Inc.

+1

zawsze możesz użyć pliku: linenumber. –

+0

@ yi_H cóż, byłoby o wiele lepiej używać nazwy funkcji, ponieważ lennik może się zmienić, jeśli zmienię kod źródłowy i będzie to nieco trudne do wyśledzenia. – xis

+0

Jestem tego świadomy, to tylko obejść. –

Odpowiedz

3

Prawdopodobnie funkcja jest zakreślona. Spróbuj dodać __asm int 3, jeśli jest to kod x86 w składni GDB i postępuj zgodnie z instrukcjami. Ta sztuczka zaoszczędziła mi wiele czasu podczas debugowania kodu MSVC x86.

+0

to jest gcc, nie trzeba hackować;) –

+2

To może działać w GCC 'asm (" int $ 0x3 ");' Pamiętaj, że ten punkt przerwania zostanie wkompilowany i powinien być używany tylko, jeśli nie możesz się włamać wbudowany lub w inny sposób zoptymalizowany kod. Spowoduje to zmiany w kodzie i może pokazać/ukryć Heisenbugs. – Coder

0

Zgaduję kompilator został pozbawiony specyfikator const,

Try b' Madoka :: polarizable_sites :: resize (size_t) '

+0

Nie, to nie działa. – xis

Powiązane problemy