Altd() und kein Stop

Xbase++-IDE - Workbench, Visual Xbase

Moderator: Moderatoren

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11316
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Altd() und kein Stop

Beitrag von AUGE_OHR » Mi, 07. Mär 2018 22:28

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)
gruss by OHR
Jimmy

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 12975
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Altd() und kein Stop

Beitrag von Jan » Do, 08. Mär 2018 5:53

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14482
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Altd() und kein Stop

Beitrag von brandelh » Do, 08. Mär 2018 7:31

Die workbench legt eine zusätzliche mit anmeldenamen an
Gruß
Hubert

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 12975
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Altd() und kein Stop

Beitrag von Jan » Do, 08. Mär 2018 8:31

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 17906
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Altd() und kein Stop

Beitrag von Manfred » Do, 08. Mär 2018 8:50

es ist aber schon klar, das es hier nie um die (soft) Breakpoints ging, sondern um altd()?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 12975
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Altd() und kein Stop

Beitrag von Jan » Do, 08. Mär 2018 9:03

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 17906
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Altd() und kein Stop

Beitrag von Manfred » Do, 08. Mär 2018 9:08

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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14482
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Altd() und kein Stop

Beitrag von brandelh » Do, 08. Mär 2018 9:19

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 ...
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1482
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Altd() und kein Stop

Beitrag von Werner_Bayern » 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.
es grüßt euch

Werner

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1482
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Altd() und kein Stop

Beitrag von Werner_Bayern » Sa, 10. Mär 2018 13:15

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.
es grüßt euch

Werner

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 17906
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Altd() und kein Stop

Beitrag von Manfred » Sa, 10. Mär 2018 14:04

Supi,
und ich wollte schon vor Verzweiflung aus dem Kellerfenster springen.
War das jetzt Zufall, oder geplant programmiert von Dir?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1482
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Altd() und kein Stop

Beitrag von Werner_Bayern » Sa, 10. Mär 2018 20:12

Geplant programmiert und zufällig auf das - auch Dein - Problem gestoßen :)
es grüßt euch

Werner

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14482
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Altd() und kein Stop

Beitrag von brandelh » Mo, 12. Mär 2018 8:13

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.
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Programmier-Gott
Programmier-Gott
Beiträge: 1482
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: Altd() und kein Stop

Beitrag von Werner_Bayern » Fr, 16. Mär 2018 12:47

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.
es grüßt euch

Werner

Antworten