Ich versuche, eine Klasse zu debuggen, die stark auf Vererbung angewiesen ist. Eine Debugsitzung ist mühsam, weil ein Objekt dieselbe Funktion für ein anderes Objekt in einer Kette aufruft. Ich verschwende viel Zeit damit, irrelevanten Code zu verwenden, der anderswo besser ausgegeben werden könnte.Haltepunkt mit Platzhaltern setzen?
Hier ist der einfache: Ich möchte einen Haltepunkt auf einer Klasseninstanz mit einem Platzhalter wie b Foo::*
setzen. Auf diese Weise wird der Debugger einrasten, wenn der Inhalt, an dem ich interessiert bin, den Bereich eingibt (wie eine statische Funktion oder eine Elementfunktion).
Hier ist der harte: eine parametrisierte Klasse: Ich möchte einen Haltepunkt auf Mitglied-Funktion einer Template-Klasse mit einem Platzhalter wie b Foo<*>::bar
setzen. (Das eigentliche Problem ist viel schlimmer als das, weil die Template-Parameter selbst Template-Klassen sind).
Obwohl GDB scheint mich eine setzen, stoppt der Debugger nicht (siehe unten). Es beansprucht, dass es einen Haltepunkt für zukünftige Lasten setzt. Tatsächlich habe ich statische Verknüpfungen verwendet und die Symbole sind bereits vorhanden. Es werden keine Bibliotheken geladen.
Wie setze ich einen Haltepunkt mit Platzhaltern?
(gdb) b CryptoPP::PK_EncryptorFilter::*
Function "CryptoPP::PK_EncryptorFilter::*" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 2 (CryptoPP::PK_EncryptorFilter::*) pending.
(gdb) r
Starting program: /home/cryptopp-ecies/ecies-test.exe
Attack at dawn!
[Inferior 1 (process 5163) exited normally]
Und:
(gdb) rbreak CryptoPP::DL_EncryptionAlgorithm_Xor<*>::SymmetricEncrypt
(gdb) r
Starting program: /home/cryptopp-ecies/ecies-test.exe
Attack at dawn!
[Inferior 1 (process 5470) exited normally]
...
(gdb) rbreak CryptoPP::*::SymmetricEncrypt
(gdb) r
Starting program: /home/cryptopp-ecies/ecies-test.exe
Attack at dawn!
[Inferior 1 (process 5487) exited normally]
Danke. Keine Freude auf der harten (C++ und Vorlagen). Ich habe die Frage aktualisiert, um das Ergebnis einzubeziehen. – jww
sind Sie sicher, dass Sie den Punkt nicht vergessen haben: 'CryptoPP :: DL_EncryptionAlgorithm_Xor <.*> :: SymmetricEncrypt' –
Ja, ich habe den Punkt nicht benutzt. Die Manpages sagten, der Punkt sei bereits vorhanden. Danke, das hat es gelöst. – jww