Embarcadero C++ Builder XE6: Ich verstehe meinen Debugger nicht
-
Hallo an alle,
abgesehen von einer kleinen Frage Mitte diesen Jahres habe ich seit Mai 2012 hier schon nichts mehr geschrieben und der aktuelle Beitrag fällt mir auch bei weitem nicht leicht. Ich hatte Ende Mai 2012 einen schweren Unfall (Schädelbruch mit Gehirnblutung) und seitdem tue ich mich reichlich schwer mit C / C++.
Ich wollte aber nicht aufgeben, was ich einmal gelernt habe und mich wieder mit C / C++ beschäftigen. Allerdings war mein Borland C++ Builder reichlich veraltet, so dass ich mir im Mai 2014 den Embarcadero C++ Builder XE6 gekauft habe. Version: 6.3
Soweit das wichtig ist,
installierte Aktualisierungen:
Help Release 1 for Delphi XE6 and C++ Builder XE6installierte Produkte:
SmartBear AQtime Standard for Embarcadero RAD Studio 8.21.1112.3
Embarcadero Quality InsightAktuell würde ich gerne einen Fehler in einer Software von mir beheben. Ich habe ihn letztes Jahr im Dezember entdeckt, spontan nicht behoben bekommen und seitdem vor mir hergeschoben. Nun wollte ich mich nochmal daran versuchen, aber ich verstehe noch nicht einmal mehr den Compiler.
Unter Borland war ich es gewohnt, dass ich einen Breakpoint setze, die Anwendung bis dorthin starten konnte und dann jede ausführbare (!) Programmzeile Zeile für Zeile durchlaufe.
Nun zum Embarcedero C++ Builder:
Ich setze einen Breakpoint, den ich selbst in Leerzeilen und Kommentarzeilen setzen kann. Das wundert mich schon, aber das soll mir ja egal sein, ich weiß ja, wo ich meine Breakpoiints hinsetze.Mit F4 starte ich meine Anwendung und er hält scheinbar am Breakpoint an.
Wenn ich nun F8 drücke, geht er nicht weiter bis zur nächsten ausführbaren Programmzeile, sondern zur nächsten Leerzeile.
Wenn ich dann nochmal F8 drücke, springt er zur übernächsten Kommentarzeile.
Er scheint zwar auch irgendetwas ausführen, doch wenn ich nicht mehr sehe, welche Zeile er als nächstes ausführen will, dann ist es auch schwer, die Zeile zu identifizieren, die den Fehler verursacht.Ich habe das Verhalten des Debuggers einmal in drei Screenshots festgehalten:
http://www.wolfgangstecher.de/Bilder/CDebugger.jpgIst das Verhalten des Debuggers wirklich so gewollt?
Kann man vielleicht irgendwo einstellen, dass er mir auch nur die als nächstes auszuführende Codezeile hinterlegt, die er ausführen möchte?Ich habe im Startmenü bereits den Punkt "Suchen von Aktualisierungen" aufgerufen, erhalte aber die Meldung, dass keine Aktualisierungen gefunden wurden. Also scheint es wohl kein Fehler zu sein, für den es zwischenzeitlich ein Update gäbe.
Wenn meine Frage absolut daneben ist, dann verzeiht mir bitte, aber für eine kleine Hilfestellung wäre ich dennoch dankbar, ich weiß einfach nicht mehr weiter.
-
Dann scheinen die Sourcen nicht mehr zu den generierten Debugdateien zu passen.
Am besten erstelle einmal einen kompletten Rebuild des Projekts (wenn das auch nicht hilft, dann mal von Hand diese Dateien im Verzeichnis löschen - ich weiß jedoch nicht genau welche Endung diese beim XE haben, aber außer .cpp und .h sowie die Projekt- und Resourcendateien müßtest du ja alles löschen können - sichere diese aber!).
-
Th69 schrieb:
Dann scheinen die Sourcen nicht mehr zu den generierten Debugdateien zu passen.
Solche Dinge passieren auch gerne wenn die Optimierung im Compiler eingeschalten ist.
MfG Stephan
-
Hallo TH69,
Danke für Deine Hilfe.
Ein Rebuild hat leider nicht geholfen, wäre ja auch zu einfach gewesen.
Mit löschen aller Dateien, außer *.h, *.cpp und *.dfm sowie Anlage eines neues Projektes und Hinzufügen dieser *.cpp und *.dfm-Dateien hat der Debugger wieder funktioniert.Er hat zwar dann über eine paar char und wchar_t Konvertierungsfehler gemeckert, aber das war über die Umstellung der gemeinsamen Projektoptionen "_TCHAR entspricht" schnell behoben.
Dadurch dass der Compiler wieder "funktionierte", habe ich auch meinen Fehler gefunden und beheben können, bin gerade richtig glücklich.
Das einzige, was mir nicht gelingen will, was aber vorher einwandfrei funktionierte, ist das Ausblenden bzw. wieder Einblenden aus der Tray.
Meine Main.cpp hat eine TTrayIcon Komponente und eine Schaltfläche.
Wenn man auf die Schaltfläche klickt, wird ein Icon im Tray angezeigt, die Anwendung aber nicht ausgeblendet.
Klickt man im Tray auf das Icon, wird das Icon auch wieder ausgeblendet.
Ob die Anwendung wieder eingeblendet würde kann ich nicht wirklich testen, da sie ja zu keinem Zeitpunt ausgeblendet worden ist.
Diese beiden (unveränderten) Funktionen sind hinterlegt:void __fastcall TF_Main::B_MinimizeClick(TObject *Sender) { TrayIcon->Visible = true; Application->Minimize(); } //--------------------------------------------------------------------------- void __fastcall TF_Main::TrayIconClick(TObject *Sender) { TrayIcon->Visible = false; Application->Restore(); } //---------------------------------------------------------------------------
Also die beiden Zeilen
Application->Minimize();
und
Application->Restore();
scheinen beide keine Wirkung zu zeigen.Hast Du hierfür zufällig eine Idee, woran das liegen könnte?
-
OK zurück marsch marsch,
außerhalb der Embarcadero Umgebung blendet sich die Anwendung aus und wieder ein, allerdings bleibt das Icon in der Taskleiste trotzdem erhalten, was natürlich nicht sein soll, da es ja im Tray angezeigt wird.