C++ GDB Haltepunkt für die Funktionen
Ich habe Probleme mit der Verwendung von GDB auf meinem c++ - Programm. Ich möchte die Einrichtung einen break-Punkt für meine Klasse member-Funktion und ich bin mir nicht sicher über die syntax, wie es zu tun. Mein Programm arbeitet, finden gerade jetzt, und ich versuche nur zu lernen, den Gebrauch von GDB. Mein problem ist, all die Informationen finde ich auf der Linie auch wirklich nur Angebote, die mit nur einer main () - Datei und keine anderen Funktionen oder Klassen, und sofern es sich um Klassen, die nur mit einer Funktion mit eine leere return-Anweisung.
Ich habe einen binären Suchbaum Klasse. Ich will eine Pause einstellen, die Punkt für Punkt-Funktion in meinem Programm.
hier der Abschnitt meiner header-Datei.
class BST
{
BST()
...
private:
int add((BST * root, BST *src);
}
Ich bin telneting in einem Kommandozeilen-linux-server für die Schule.
Ich kann den GDB zum laufen mit meinem Programm nur gut mit g++ -g *.cpp (es gibt auch andere Dateien, die funktionieren) und die Datei wird gespeichert als.aus.
Ich GDB mit
gdb ./a.out
bekommen und habe in den GDB. Ich kann einen break-Punkt für das leere display Funktion einwandfrei mit
b BST::disp_block()
aber wie mache ich es mit der add-Funktion, die ich versucht habe
b BST::int add(BST*, BST *)
b int BST::add(BST*, BST *)
b BST::add(BST*, BST *)
und ich habe sogar versucht mit dem argument-Namen
b BST::int add(BST * root, BST * src)
b int BST::add(BST * root, BST * src)
b BST::add(BST * root, BST * src)
und ich erhalte die Fehlermeldung
Function "____" not defined.
Make break point pending on future shared library load? (y or [n])
Wie richte ich einen break-Punkt für eine member-Funktion wie diese? Im vorausgesetzt, Uhr Punkte würde das gleiche format, wenn nicht, könnten Sie erklären, dass auch.
- In der Abwesenheit von überlastungen oder wenn Sie möchten, zu brechen, in allen überlastungen, die
b BST::add
. Keine Notwendigkeit für Argumente. Beachten Sie, dass müssen Sie den namespace auch wenn sich Ihre Klasse in einem namespace. - Es ist auch möglich, einen breakpoint zu setzen in gdb über filename:linenumber. Wenn Ihre Funktion in bst.c, auf Linie 25, wäre der Befehl: (gdb) b bst.c:25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Dark Falcon sagte,
break BST::add
sollte funktionieren, wenn Sie nicht überlasten.Können Sie auch eingeben:
(man beachte den Apostroph). Dies sollte die Eingabeaufforderung von GDB ausführen Tabulator-Vervollständigung, und beenden Sie die Zeile etwa so:
und die Stelle können Sie fügen Sie die Kündigung
'
' und drücken Sie die EINGABETASTE, um fügen Sie den Haltepunkt.Funktion Rückgabetyp ist nicht Teil seiner Signatur und hat nichts zu tun mit dem, was passiert.
info func
mit einem regexp-argument zu finden, was gdb denkt einer Funktion benannt werden.Möglicherweise müssen Sie den namespace angeben, wenn jeder definiert für die Klasse. Wenn es andere als die standard-Namensraum std. Der name der Datei ist optional, wenn Sie die Ausführung der richtigen binäre. Sie können überprüfen, ob das symbol vorhanden ist, auf die ausführbare Datei über. "nm -C" Befehl -C handles name mangling bei C++.
Also, um zusammenzufassen, mit einem Beispiel: Wenn der namespace ist "mySpace" und der Klasse "X", deren Mitglied "Y", dann wird der breakpoint sein soll wie die, die unten "(gdb) b mySpace::X::Y"