Debuggen mit Haltepunkten innerhalb von OnPaint() Problem
-
Hallo zusammen!
Folgender Fall: VS2012 und die zu debuggende MFC-App werden maximiert im Vollbild dargestellt.
Wenn die App nun mit Hilfe eines Haltepunkts debugged wird, stoppt die App beim gesetzten Haltepunkt und startet nach Betätigung von F5 automatisch im Vordergrund.
Leider funktioniert das aber nicht mit einem Haltepunkt innerhalb der Grafikfunktion OnPaint(). Bevor die App startet, ruft sie immer wieder OnPaint() auf und landet so immer wieder beim Haltepunkt des Deguggers in VS2012.
Das läßt sich nur umgehen, wenn VS2012 und die App als Fenster nebeneinander auf dem Bildschirm plaziert werden.
Gibt es eine Möglichkeit OnPaint() mit einem Haltepunkt zu debuggen, während sich VS2012 im Vollbildmodus befindet und die App startet nach dem Haltpunkt automatisch im Vordergrund, wie das auch beim Debuggen außerhalb von OnPaint() der Fall ist?
Grüße,
Bernd
-
mireiner schrieb:
Bevor die App startet, ruft sie immer wieder OnPaint() auf
Sicherlich nicht, bevor sie startet. Aber eben bevor du etwas davon siehst. Du hältst ja genau an der Stelle an, an der neu gezeichnet wird.
mireiner schrieb:
Gibt es eine Möglichkeit OnPaint() mit einem Haltepunkt zu debuggen, während sich VS2012 im Vollbildmodus befindet und die App startet nach dem Haltpunkt automatisch im Vordergrund, wie das auch beim Debuggen außerhalb von OnPaint() der Fall ist?
Remotedebugging. Oder ein zweiter Bildschirm.
-
Remotedebugging. Oder ein zweiter Bildschirm.
Schade, ich hatte gehofft, daß es vielleicht noch andere Möglichkeit gibt.
Das macht das Debuggen von Grafik innerhalb von OnPaint() nicht gerade eben einfach.
Trotzdem danke für die Antwort!
-
Tritt der Bug nur im Vollbildmodus auf, oder wieso genau kannst du den zum Debuggen nicht einfach ausschalten?
-
Und wenn Du den Breakpoint so konditionierst das er nach 1x aufrufen
inaktiv wird ? (Hit Count property)Oder ein Step-Over ?
Bin mir nicht sicher ob Du mit dem Breakpoint haderst
oder mit der Nachrichtenschleife.
-
pV schrieb:
Und wenn Du den Breakpoint so konditionierst das er nach 1x aufrufen
inaktiv wird ? (Hit Count property)Oder ein Step-Over ?
Beide Möglichkeiten kannte ich noch nicht und werde ich mal anschauen.
Aber sie werden in meinem speziellen Problem wohl nicht helfen. Denn ich möchte eine Grafikfunktion innerhalb von OnPaint() debuggen, die bis zum Programmstart entweder 1x oder 2x aufgerufen wird (bei einem Programmfehler möglicherweise noch häufiger) - je nach Programmoptionen.
Es handelt sich dabei um eine Basisklassenfunktion, die von zwei verschiedenen abgeleiteten Klassen geerbt wird.
Bin mir nicht sicher ob Du mit dem Breakpoint haderst oder mit der Nachrichtenschleife.
Mit beiden, weil OnPaint() in dem Moment, wenn die App starten und sich in den Vordergrund schieben will, irgendwie noch einmal aufgerufen wird und ich so wieder im Debugger beim meinem Haltpunkt lande usw. usw..
Das kann ich vermeiden, wenn ich VS2012 und die App auf dem Bildschirm nebeneinander betreibe. Dann lande ich beim Programmstart der App nicht wieder im Debugger. Leider wird beim Verkleinern des Programmfensters der App die Grafik natürlich nicht vollständig dargestellt, sodaß es nicht möglich ist zu überprüfen, ob sie richtig dargestellt wird.
Das Problem müßte ja eigentlich jeder kennen, der schon mal Grafikfunktionen innerhalb von OnPaint() debugged hat. Das scheint ja ein grundsätzliches Problem zu sein.
-
Die Lösungen wurden genannt: Remote Debugging, zweiter Monitor.
Wobei ich das erstere grundsätzlich bevorzuge.
-
Martin Richter schrieb:
Die Lösungen wurden genannt: Remote Debugging, zweiter Monitor.
Wobei ich das erstere grundsätzlich bevorzuge.Für mich war das Thema mit der ersten Antwort von MFK eigentlich auch abgeschlossen. Die Lösung mit zweitem Monitor ist mir klar, da es auch funktioniert, wenn VS2012 und die App nebeneinander auf dem Bildschirm betrieben werden.
Für Remote Debugging, so dachte ich jedenfalls, wird ein zweiter Rechner benötigt, vom dem es betrieben wird. Da ich aber weder einen zweiten Monitor, noch einen zweiten Rechner besitze, hatte ich das Thema für erledigt gehalten.
Gibt es denn eine Möglichkeit Remote Debugging nur mit einem einzigen Rechner auszuführen?
-
Für den Fall dass es übersehen wurde:
dot schrieb:
Tritt der Bug nur im Vollbildmodus auf, oder wieso genau kannst du den zum Debuggen nicht einfach ausschalten?
-
@dot
Von einem "Bug" war nie die Rede. Sondern von einem ganz normalen Verhalten von Visual Studio, daß das Deguggen innerhalb der OnPaint Funktion erschwert."Vollbild" war vielleicht mißverständlich ausgedrückt. Gemeint ist wenn VS2012 den ganzen Bildschirm einnimmt.
Im übrigen ist die Lösung schon in der ersten Antwort genannt worden. Trotzdem danke für die angebotene Hilfe.
-
Oh, da hab ich wohl was falsch verstanden...
-
mireiner schrieb:
Gibt es denn eine Möglichkeit Remote Debugging nur mit einem einzigen Rechner auszuführen?
Ja! In einer virtuellen Maschine und dort gibt es dann naürlich auchnicht das Problem des Fokus Verlusts etc. Auch azyklische Paints kommen eigentlich nicht vor.
Ich benutze das auch oft. Obwohl hier ein zweiter Monitor auch von Vorteil ist.
-
Martin Richter schrieb:
Ja! In einer virtuellen Maschine und dort gibt es dann naürlich auchnicht das Problem des Fokus Verlusts etc. Auch azyklische Paints kommen eigentlich nicht vor.
Ich benutze das auch oft. Obwohl hier ein zweiter Monitor auch von Vorteil ist.Das war mir nicht bewußt. Danke für die Info!
-
danke