Variablenbeobachtung in einer Repeat-Until-Ereignisstruktur
Verfasst: 25.06.2012 02:09
Hallo,
ich habe ein Problem beim Testen eines Programms (also beim Debugging). Der Kode erstellt zuerst ein GUI und soll dann, in Abhängigkeit von der Benutzereingabe, nach Betätigung der Schaltfläche "Berechnen" () ein paar Berechnungen durchführen und deren Ergebnis anzeigen. Ein ganz klassischer Fall also. Hier der Kode:
Der Vollständigkeit halber: Das Programm soll die Differenz zwischen zwei Zeitpunkten A und B berechnen, wobei A und B Werte in Stunden, Minuten Sekunden und Tausendstelsekunden darstellen. Ein solches Programm ist nützlich, wenn man bei Asynchronitäten von Untertiteln und Bild den Versatzwert braucht.
Ich versuche nun schon seit einer Stunde, wie ich das Programm in der mit "X" markierten Zeile anhalten lassen kann, um dann im Variablenfenster die Werte der berechneten Variablen beobachten zu können. Ich habe in dieser Zeile selbstverständlichen einen Haltepunkt gesetzt; aber das nützt nicht viel. Nach dem Compilieren (F5) springt das Programm wild in der Repeat-Until-Schleife herum, ohne jemals in der besagten Zeile anzuhalten.
Überhaupt würde ich gern den Programmablauf vom Start weg im Einzelschrittverfahren abarbeiten können (wie dies in Visual Basic problemlos mittels F8 möglich ist), aber F8 ist bei mir im Editor vor dem Debuggen immer deaktiviert. Was mache ich verkehrt?
Vielen Dank
ich habe ein Problem beim Testen eines Programms (also beim Debugging). Der Kode erstellt zuerst ein GUI und soll dann, in Abhängigkeit von der Benutzereingabe, nach Betätigung der Schaltfläche "Berechnen" () ein paar Berechnungen durchführen und deren Ergebnis anzeigen. Ein ganz klassischer Fall also. Hier der Kode:
Code: Alles auswählen
EnableExplicit
Enumeration
#Hf
#Bz_Ztpkt_1
#Tf_h1
#Bz_h1
#Tf_min1
#Bz_min1
#Tf_sek1
#Bz_sek1
#Tf_tsek1
#Bz_tsek1
#Bz_Ztpkt_2
#Tf_h2
#Bz_h2
#Tf_min2
#Bz_min2
#Tf_sek2
#Bz_sek2
#Tf_tsek2
#Bz_tsek2
#Ra_Erg
#Bz_Erg
#Sf_Berechne
EndEnumeration
LoadFont(1, "WH12G", 8)
OpenWindow(#Hf, 460, 406, 281, 125, "Differenz", #PB_Window_SystemMenu|#PB_Window_TitleBar )
SetGadgetFont(#Bz_Ztpkt_1, 1)
TextGadget(#Bz_Ztpkt_1, 7, 11, 71, 16, "Zeitpunkt 1:")
StringGadget(#Tf_h1, 85, 8, 14, 22, #NULL$, #PB_String_Numeric)
TextGadget(#Bz_h1, 102, 11, 7, 18, "h")
StringGadget(#Tf_min1, 115, 8, 21, 22, #NULL$, #PB_String_Numeric|#PB_Text_Right)
TextGadget(#Bz_min1, 139, 11, 22, 18, "min")
StringGadget(#Tf_sek1, 164, 8, 21, 22, #NULL$, #PB_String_Numeric|#PB_Text_Right)
TextGadget(#Bz_sek1, 187, 11, 7, 18, "s")
StringGadget(#Tf_tsek1, 198, 8, 27, 22, #NULL$, #PB_String_Numeric)
TextGadget(#Bz_tsek1, 228, 11, 42, 18, "/1000 s")
TextGadget(#Bz_Ztpkt_2, 7, 40, 71, 16, "Zeitpunkt 2:")
StringGadget(#Tf_h2, 85, 37, 14, 22, #NULL$, #PB_String_Numeric)
TextGadget(#Bz_h2, 102, 40, 7, 18, "h")
StringGadget(#Tf_min2, 115, 37, 21, 22, #NULL$, #PB_String_Numeric|#PB_Text_Right)
TextGadget(#Bz_min2, 139, 40, 22, 18, "min")
StringGadget(#Tf_sek2, 164, 37, 21, 22, #NULL$, #PB_String_Numeric|#PB_Text_Right)
TextGadget(#Bz_sek2, 187, 40, 7, 18, "s")
StringGadget(#Tf_tsek2, 198, 37, 27, 22, #NULL$, #PB_String_Numeric)
TextGadget(#Bz_tsek2, 228, 40, 42, 18, "/1000 s")
Frame3DGadget(#Ra_Erg, 10, 65, 149, 49, "Ergebnis")
TextGadget(#Bz_Erg, 49, 87, 68, 16, #NULL$, #PB_Text_Center)
ButtonGadget(#Sf_Berechne, 172, 73, 98, 40, "Berechnen")
Define.b std1, std2, estd, min1, min2, emin
Define.u Fe
Define.d sek1, sek2, gsek1, gsek2, diff
Define.s Erg
Repeat
Fe = WaitWindowEvent()
If Fe = #Sf_Berechne
std1 = Val(GetGadgetText(#Tf_h1))
std2 = Val(GetGadgetText(#Tf_h2))
min1 = Val(GetGadgetText(#Tf_min1))
min2 = Val(GetGadgetText(#Tf_min2))
sek1 = Val(GetGadgetText(#Tf_sek1)) + Val("." + GetGadgetText(#Tf_tsek1))
sek2 = Val(GetGadgetText(#Tf_sek2)) + Val("." + GetGadgetText(#Tf_tsek2))
X gsek1 = std1*3600 + min1*60 + sek1
gsek2 = std2*3600 + min2*60 + sek2
diff = Abs(gsek1 - gsek2)
If diff >= 3600
estd = Int(diff/3600)
diff = Mod(diff, 3600)
EndIf
If diff >= 60
emin = Int(diff/60)
diff = Mod(diff, 60)
EndIf
If estd > 0
Erg = StrU(estd, #PB_Byte) + " h" + StrU(emin, #PB_Byte) + " min"
EndIf
If estd = 0 And emin > 0
Erg = StrU(emin, #PB_Byte) + " min"
EndIf
SetGadgetText(#Bz_Erg, Erg)
EndIf
Until Fe = #PB_Event_CloseWindow
Ich versuche nun schon seit einer Stunde, wie ich das Programm in der mit "X" markierten Zeile anhalten lassen kann, um dann im Variablenfenster die Werte der berechneten Variablen beobachten zu können. Ich habe in dieser Zeile selbstverständlichen einen Haltepunkt gesetzt; aber das nützt nicht viel. Nach dem Compilieren (F5) springt das Programm wild in der Repeat-Until-Schleife herum, ohne jemals in der besagten Zeile anzuhalten.
Überhaupt würde ich gern den Programmablauf vom Start weg im Einzelschrittverfahren abarbeiten können (wie dies in Visual Basic problemlos mittels F8 möglich ist), aber F8 ist bei mir im Editor vor dem Debuggen immer deaktiviert. Was mache ich verkehrt?
Vielen Dank