Seite 2 von 2

Re: Altd() und kein Stop

Verfasst: Mi, 07. Mär 2018 22:28
von AUGE_OHR
Fragen @Manfred :

benutzt du INLINE METHOD ?
ist der Code in einer DLL ?
bist du dir sicher das du die richtige "persönlich" XPJ erwischt hast ?

wie Huber bestätigt hat kann man damit meisten das Problem lösen.

---

mal versucht aus der CMD Box den GUI Debugger zu starten

Code: Alles auswählen

VX20.EXE MyApp.EXE (alter Version)
WXB.EXE  MyApp.EXE (neue Version)

Re: Altd() und kein Stop

Verfasst: Do, 08. Mär 2018 5:53
von Jan
Was habt Ihr eigentlich immer alles an xpj bei Euch liegen? Bei mir gibt es grundsätzlich nur eine. Und die heißt meistens auch noch einfach standardmäßig project.xpj.

Jan

Re: Altd() und kein Stop

Verfasst: Do, 08. Mär 2018 7:31
von brandelh
Die workbench legt eine zusätzliche mit anmeldenamen an

Re: Altd() und kein Stop

Verfasst: Do, 08. Mär 2018 8:31
von Jan
Das ist richtig. Aber die heißt ja nicht mehr xpj. Und Jimmy hatte da Namen genannt die ich als paralllel nebeneinanderliegende xpj verstanden habe.

Die Breakpoints kann man im Übrigen auf zwei Weisen löschen: Man löscht die aus der xpj.[anmeldename] manuell raus. Oder man geht auf Ansicht->Debug-Fenster->Haltepunkte, und entfernt die da. Was auch selektiv geschehen kann, wenn man nur die ungültigen nimmt z. B. Denn immerhin versteht dieser Teil der Workbench, das da was schief gelaufen ist, und erkennt ungültige Breakpoints. Im Gegensatz zum Codefenster.

Als Ergänzung zu dem, was ich gestern schrieb: Wenn ein kompletter Projekt-Neuaufbau nichts bringt bei Problemen, gehe ich den etwas umfangreicheren Weg (musste ich aber schon lange nicht mehr machen, Alaska bekommt die Workbench tatsächlich immer stabiler hin): Erstellen->Projekt aufräumen, Erstellen->Abhängigkeiten neu erstellen, Erstellen->Projekt neu erstellen. Damit habe ich das dann eigentlich immer hinbekommen.

Jan

Re: Altd() und kein Stop

Verfasst: Do, 08. Mär 2018 8:50
von Manfred
es ist aber schon klar, das es hier nie um die (soft) Breakpoints ging, sondern um altd()?

Re: Altd() und kein Stop

Verfasst: Do, 08. Mär 2018 9:03
von Jan
Moin Manfred,

logisch. Hatte ich ja auch extra bei der Meldung des PDR geschrieben.

Und das mit dem Neuaufbau des Projektes bezog sich direkt auf Dein Problem. Da ja die Kurzversion nichts genützt hatte.

Hat Alaska eigentlich schon was zu Deinem Problem gesagt? Bei mir hatte Till ja sofort geantwortet mit dem PDR.

Jan

Re: Altd() und kein Stop

Verfasst: Do, 08. Mär 2018 9:08
von Manfred
ja, sie haben geantwortet. Können es sich auch nicht erklären. Also lasse ich es erstmal ruhen. Ich wollte auch nur wissen, ob es sowas wie einen Schalter dafür gibt und ich das Suchen einstellen kann. Scheint es aber nicht zu geben. Also ist irgendwas im Projekt im Argen. Woanders klappt es nämlich. Obwohl ich das nicht verstehen kann, das altd() einfach übersprungen werden kann.

Re: Altd() und kein Stop

Verfasst: Do, 08. Mär 2018 9:19
von brandelh
Ich habe hier ein Projekt (MDI Gerüst für neue Programme) ... wenn ich da in der Projekt Anzeige auf die Funktion klicke, lande ich irgendwo in der Datei.
Hinzu kommt, dass die Liste der Funktionen nicht sortiert ist ...
Mit CodeExplorer treffe ich richtig, muss aber wissen, in welcher Datei die Funktion liegt. Hier würde ich eine Liste aller Funktionen des Projektes erwarten, egal in welcher Datei.

Und eben suche ich mir einen Wolf, weil das Programm unter 2.0 einfach weg stirbt, ohne eine log auf der Platte.
Nach einiger Zeit habe ich EXIT prozedure eingebaut und siehe da es wird noch angezeigt ...
Dann habe ich meine angepasste ErrorSys.PRG entfernt und erhalte zumindest eine Fehlermeldung ...
Ich konnte es eingrenzen auf meine Funktion die schon ewig läuft:

Code: Alles auswählen

*-----------------------------------------------------------------------------
FUNCTION DoEventLoop(nSeconds)               // For Next Schleifen unterbrechen und Events verarbeiten !
   LOCAL nBisSeconds, nEvent, mp1:=nil, mp2:=nil, oXbp:=nil, dBis
   DEFAULT nSeconds to 0
   dBis := date()
   nBisSeconds := seconds() + nSeconds
   IF nBisSeconds >= 86400                   // Endlosschleife um Mitternacht verhindern
      dBis++
      nBisSeconds := nBisSeconds % 86400
   ENDIF
   DO WHILE .T.
      nEvent := AppEvent( @mp1, @mp2, @oXbp, nSeconds)
      DO CASE
         CASE nEvent = xbe_None
            * nichts tun ist hier Standard
         CASE nEvent = xbeP_Keyboard .and. mp1 == xbeK_F1
            * xbeP_HelpRequest erscheinen für jede Xbp Instanz, also zu oft !
            ShowNoHelp()  // in ANW_MENU.PRG
         OTHERWISE
            oXbp:handleEvent( nEvent, mp1, mp2 )
      ENDCASE
      IF nSeconds > 0
         IF date() = dBis .AND. nBisSeconds < seconds()
            exit
         ENDIF
      ENDIF
   ENDDO
RETURN NIL
und nach weiterer Suche finde ich ein /Z im Compiler Aufruf, warum sollte ich das eingestellt haben ???? mal sehen ob ich das raus bekomme in alten Sicherungen ...

Aber damit wird eines klar:

CASE nEvent = xbeP_Keyboard .and. mp1 == xbeK_F1

der Event ist Rezise, mp1 enthält ein Array und das wird mit == verglichen mit einer Zahl ....

mit der 1.90 konnte ich das seltsamerweise kompilieren ...

Re: Altd() und kein Stop

Verfasst: Sa, 10. Mär 2018 13:12
von Werner_Bayern
brandelh hat geschrieben: Do, 08. Mär 2018 9:19 Aber damit wird eines klar:

CASE nEvent = xbeP_Keyboard .and. mp1 == xbeK_F1

der Event ist Rezise, mp1 enthält ein Array und das wird mit == verglichen mit einer Zahl ....
Mir nicht... Wenn der Event Resize ist, dann wird die nachfolgende Anweisung auch nicht ausgeführt. Der Code sollte also korrekt sein.

Re: Altd() und kein Stop

Verfasst: Sa, 10. Mär 2018 13:15
von Werner_Bayern
Manfred hat geschrieben: Do, 08. Mär 2018 9:08 ja, sie haben geantwortet. Können es sich auch nicht erklären.
Servus Manfred,

jetzt hab ich das auch:

Code: Alles auswählen

do while …
      if .not. nFormularnr == 3->bestellnr
         nFormularnr := 3->bestellnr
         if .not. empty(aSL)
            altd()
            debugprint("Haltepunkt")
            aSL := {}
         endif
      endif
    skip
enddo
Altd() wird nicht ausgeführt, debugprint() jedoch schon. Ändere ich den Code vor do while, wird manchmal altd() schon ausgeführt – dann auch immer, also während der Programmausführung bleibt das Verhalten konstant, entweder gar nicht oder korrekt.

Habs auch an Alaska gemeldet.

Re: Altd() und kein Stop

Verfasst: Sa, 10. Mär 2018 14:04
von Manfred
Supi,
und ich wollte schon vor Verzweiflung aus dem Kellerfenster springen.
War das jetzt Zufall, oder geplant programmiert von Dir?

Re: Altd() und kein Stop

Verfasst: Sa, 10. Mär 2018 20:12
von Werner_Bayern
Geplant programmiert und zufällig auf das - auch Dein - Problem gestoßen :)

Re: Altd() und kein Stop

Verfasst: Mo, 12. Mär 2018 8:13
von brandelh
Werner_Bayern hat geschrieben: Sa, 10. Mär 2018 13:12
brandelh hat geschrieben: Do, 08. Mär 2018 9:19 Aber damit wird eines klar:

CASE nEvent = xbeP_Keyboard .and. mp1 == xbeK_F1

der Event ist Rezise, mp1 enthält ein Array und das wird mit == verglichen mit einer Zahl ....
Mir nicht... Wenn der Event Resize ist, dann wird die nachfolgende Anweisung auch nicht ausgeführt. Der Code sollte also korrekt sein.
Im Normalfall hast du Recht, aber man kann mit /Z die Optimierung bei solchen Abfragen abschalten, z.B. um sicherzustellen, dass alle Funktionen nach IF durchlaufen werden.
In dem fraglichen Projekt war /Z drinn, wahrscheinlich irgendwann man aus Versehen angeklickt ... normalerweise habe ich das nicht.

Re: Altd() und kein Stop

Verfasst: Fr, 16. Mär 2018 12:47
von Werner_Bayern
Ah, ok, danke für die Klarstellung. /Z kannte ich nicht. Auf die Optimierung verlasse ich mich sehr bewusst, mit /Z würde bei mir kein Programm mehr laufen.