GDB bedingter Haltepunkt für beliebige Typen

8

Ist es möglich, einen bedingten Haltepunkt in GDB zu setzen, in dem der Bedingungsausdruck Objekte beliebiger Klassen enthält?

Ich muss einen Haltepunkt innerhalb einer Funktion setzen, wo die Bedingung überprüft, ob eine Mitglieds-String-Variable eines Objekts gleich "foo" sagen kann. So etwas wie:

%Vor%

Aber es funktioniert nicht. Erlaubt GDB nur bedingte Haltepunkte für primitive und char * -Typen? Gibt es eine Möglichkeit, einen bedingten Haltepunkt für nicht-primitive Typen festzulegen?

    
Golam Kawsar 29.05.2012, 14:24
quelle

2 Antworten

8
  

Gibt es eine Möglichkeit, einen bedingten Haltepunkt für nicht-primitive festzulegen   Typen?

Ja, eine Möglichkeit besteht darin, den nicht primitiven Typ in den primitiven Typ zu konvertieren, in Ihrem Fall in char* , und strcmp , um Strings zu vergleichen.

%Vor%     
ks1322 29.05.2012, 15:15
quelle
5

Die Antwort auf Ihre Frage lautet ja ... im allgemeinen Fall funktioniert es für beliebige Klassen und Funktionen und Klassenmemberfunktionen. Sie sind nicht damit beschäftigt, primitive Typen zu testen. Überladungen von Klassenmitgliedern, wie operator== , sollten funktionieren.

Aber die Standard Library ist ziemlich verrückt. Ich wette, das Problem mit diesem Fall hat mit operator== zu tun, da es sich bei std :: string um eine globale Template-Überladung handelt:

Ссылка

So sind die Deklarationen wie folgt:

%Vor%

Ich habe oft Probleme mit gdb ... und ich wäre nicht überrascht, wenn es nicht wüsste, was ich davon halten soll!

Beachten Sie, dass Sie zusätzlich zu dem, was ks1322 sagte, im C ++ - Bereich bleiben und einfach std :: string :: compare () :

%Vor%     
HostileFork 29.05.2012 16:29
quelle

Tags und Links