Debuggen von Konstanten

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Debuggen von Konstanten

Beitrag von Manfred »

Hi,

wie schon des öfteren hier bemerkt, ich habe ein Projekt übernommen, in dem sehr viele Funktionen in Konstanten gepackt wurden. Jetzt habe ich nur ein dickes Problem, es gibt Fehlermeldungen, die bei der Ausführung eben dieser Konstanten auftreten. Habe ich überhaupt irgendwelche Chancen diese über den Debugger nachzuvollziehen? Die Funktionen darin werden ja nicht mehr aufgerufen und können somit ja nicht schrittweise durchlaufen werden. Gibt es evtl. irgendwelche Tricks dazu, oder ist es hoffnungslos? Ich habe schon versucht alles in reine Funktionen zu packen, aber da ist soviel drin, was jedesmal neue Fehler verursacht und sei es nur, dass LOCAL Variablen genutzt werden, die dann als Parameter übergeben werden müßten, oder weitere Konstanten, die wiederum andere Funktionen aufrufen. Also eine Verschachtelung usw.. Bevor ich nun damit anfange alles zu zerpflücken, würde mich doch interessieren, ob es evtl. einen anderen Weg gibt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Debuggen von Konstanten

Beitrag von brandelh »

Konstanten nennt man die #DEFINES, also text oder numerische Konstanten.
Wenn Funktionen dabei sind, müssten das #TRANSLATE oder #COMMAND sein, diese Zeilen sollten irgendwie schon erscheinen, teilweise aber alles in einer Zeile ...
Beim Verständnis sollte die PPO Datei weiterhelfen, da dort diese Auflösung stattgefunden hat.
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Debuggen von Konstanten

Beitrag von Manfred »

Hubert,

ich meinte Konstanten. Es wurden Funktionen über #defines "verwandelt". Was da drin steht, weiß ich, aber zur Laufzeit ist es übel die Fehler zu finden darin. Oder auch komplette Codeblöcke.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Debuggen von Konstanten

Beitrag von georg »

Hallo, Manfred -


ein Vorschlag, der "von hinten durch die Brust ins Auge" geht: dupliziere das Projekt in ein neues Verzeichnis, compiliere dort das Projekt mit Erstellung einer .ppo-Datei und nimm von dem entsprechenden Modul die .ppo-Datei und benenne sie (unter Löschung der Original-Datei) und .prg um. Compiliere noch einmal, und Du hast einen Quelltext, in dem die ganzen #DEFINEs aufgelöst sind. Damit sind natürlich auch xbeP_Close und Konsorten nur noch als Zahlenwert vorhanden, aber Du hast wenigstens eine Chance, den Programmtext zu sehen, der ausgeführt wird.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Debuggen von Konstanten

Beitrag von Manfred »

Hi Georg,

die Idee hatte ich zwischendurch auch. So habe ich zumindest das derzeitige Problem gelöst bekommen. Aber nervig ist das trotzdem, weil der schön formatierte Quelltext dadurch natürlich in die Wicken geht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Debuggen von Konstanten

Beitrag von brandelh »

Hallo Manfred,

zeig doch mal ein solches Beispiel mit #DEFINES was dich nervt ...
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Debuggen von Konstanten

Beitrag von Manfred »

Hi Hubert,

genervt hat das hier. Da hatte ich field-> gegen den DBF Namen getauscht, aber nicht realisiert, dass es in verschiedenen Tabellen genutzt wird

Code: Alles auswählen

#define SAG_JJJJ Stuff( SEEK_NRBUC( field->nr_buc ) , 3 , 2 , "")
aber sowas ist auch vorhanden.
hier habe ich z.B. die Konstante gegen den originalen Code ausgtauscht. zu sehen ab Stuff().

Code: Alles auswählen

#define LADE_JO ;
                          {||AAdd( ar_bbb , PadR( Stuff( SEEK_NRBUC( jo->nr_buc ) , 3 , 2 , "") + "B"        ,10," ")  +; //  1-10 <------- hier stand z.B. SAG_JJJJ drin
                                            PADR_DATU( jo->dat_buc               ,10," ")  +; // 11-10
                                            PadR( jo->txxt                  ,30," ")  +; // 21-30
                                            PadR( Str(  N_B     ,20,2)  ,20," ")  +; // 51-20
                                            PadR( " "                   ,20," ")  +; // 71-20
                                            PadR( " "                   ,20," ")  +; // 91-20
                                            PadR( " "                   ,20," ")  +; //101-20
                                            PadR( " "                   ,20," ") ),; //121-20
                             AAdd( ar_clo , PadR( Stuff( SEEK_NRBUC( jo->nr_buc ) , 3 , 2 , "") + "B"        ,10," ")  +; //  1-10
                                            PadR( DToS(jo->dat_buc)         ,10," ")  +; // 11-10
                                            PadR( jo->txxt                  ,30," ")  +; // 21-30
                                            PadR( Str(  N_B     ,20,2)  ,20," ")  +; // 51-20
                                            PadR( " "                   ,20," ")  +; // 71-20
                                            PadR( " "                   ,20," ")  +; // 91-20
                                            PadR( " "                   ,20," ")  +; //101-20
                                            PadR( " "                   ,20," ") ),; //121-20 bezahlt
                             ar_sum[1] := ar_sum[1] + jo->b_soll *(-1) ,;
                             ar_sum[2] := ar_sum[2] + jo->b_haben,;
                             su := AScan( ar_jsum , jo->jjjj ),;
                             IF( su = 0 ,AAdd( ar_jsum, jo->jjjj + Str( N_B ,20,2)), ar_jsum[su] := STRING_PLUS(ar_jsum[su], N_B ,5,20,2) ), su := AScan( ar_ssum , jo->jjjj ),;
                             IF( su = 0 ,AAdd( ar_ssum, jo->jjjj +Space(6) + Str( N_B  ,20,2) + Space(40) ), ar_ssum[su] := STRING_PLUS(ar_ssum[su], N_B ,11,20,2) );
                           }
#define LADE_FIB ;
          {||AAdd( ar_fib , PadR( fib->jjjj                      ,10," ")  +; //  1-10
                            PadR( Stuff( SEEK_NRBUC( fib->nr_buc ) , 3 , 2 , "")                  ,10," ")  +; // 11-10  <------- hier stand z.B. SAG_JJJJ drin
                            PADR_DATU( fib->dat_wer                   ,10," ")  +; // 21-10
                            PadR( fib->txxt                      ,30," ")  +; // 31-30
                            PadR( " "                       ,20," ")  +; // 61-20
                            PadR( Str(  fib->betrag       ,20,2) ,20," ")  +; // 81-20
                            PadR( fib->blz                       ,10," ")  +; //101-10
                            PadR( fib->kt_nr                     ,10," ")  +; //111-10
                            PadR( fib->az                        ,10," ")  +; //121-10
                            PadR( " "                       ,20," ") ),; //131-20
             AAdd( ar_clo , PadR( Stuff( SEEK_NRBUC( fib->nr_buc ) , 3 , 2 , "") + "K"            ,10," ")  +; //  1-10
                            PadR( DToS(fib->dat_wer)             ,10," ")  +; // 11-10
                            PadR( fib->txxt                      ,30," ")  +; // 21-30
                            PadR( " "                       ,20," ")  +; // 51-20
                            PadR( Str(  fib->betrag       ,20,2) ,20," ")  +; // 71-20
                            PadR( fib->blz                       ,10," ")  +; // 91-10
                            PadR( fib->kt_nr                     ,10," ")  +; //101-10
                            PadR( fib->az                        ,10," ")  +; //111-10
                            PadR( " "                       ,20," ") ),; //121-20
             ar_sum[6] := ar_sum[6] + fib->betrag    ,;
             su := AScan( ar_fsum , fib->jjjj ) ,;
             IF( su = 0 ,AAdd( ar_fsum, fib->jjjj + Str( fib->betrag ,20,2)  ) , ar_fsum[su] := STRING_PLUS(ar_fsum[su], fib->betrag ,5,20,2) ) ,;
                 su := AScan( ar_ssum , fib->jjjj ) ,;
                 IF( su = 0 ,AAdd( ar_ssum, fib->jjjj +Space(6)+ Space(20) + Str( fib->betrag ,20,2) + Space(20) ), ar_ssum[su] := STRING_PLUS(ar_ssum[su],fib->betrag,31,20,2) ) }
Da sind dann teilweise wieder andere Konstanten untergebracht, die wiederum Funktionen aufrufen :confused2: usw.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Debuggen von Konstanten

Beitrag von brandelh »

Ja, nach so einem DEFINE kann man ALLE nachfolgenden Zeilenangaben vergessen.

SUPER hatte die Zeilen anfangs (immer noch ?) um eine Zeile verschoben, aber nach so einem Konstrukt sind das sehr viel mehr.
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Debuggen von Konstanten

Beitrag von Koverhage »

ich würde die ppo Datei im Editor laden, das Programm ganz normal debuggen. Im Editor kannt Du ja dann
die Zeile in der Probleme auftauchen ganz normal anspringen
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Debuggen von Konstanten

Beitrag von Manfred »

Hallo Klaus,

das hatte ich ja so ähnlich gemacht. NUR, wenn ich das überall mache, wo es auftaucht, dann bin ich reif für die Klapse. Das zieht sich nämlich breit durch den ganzen Code.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Debuggen von Konstanten

Beitrag von UliTs »

Manfred hat geschrieben:Hi Hubert,

genervt hat das hier. Da hatte ich field-> gegen den DBF Namen getauscht, aber nicht realisiert, dass es in verschiedenen Tabellen genutzt wird

Code: Alles auswählen

#define SAG_JJJJ Stuff( SEEK_NRBUC( field->nr_buc ) , 3 , 2 , "")
...
Ich würde so etwas in eine Funktion ohne Parameter umwandeln:

Code: Alles auswählen

FUNCTION SAG_JJJJ()
RETURN(  )
Und überall, wo SAG_JJJJ benutzt wird, noch "()" dranhängen. So wird der Code mit wenigen Minuten Aufwand lesbarer und kann leichter mit dem Debugger untersucht werden :-) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Debuggen von Konstanten

Beitrag von Manfred »

Uli,

so weit war ich auch schon. Aber dann hat es geknallt, weil darin wieder LOCAL Vars waren, die dann natürlich nicht bekannt sind.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Debuggen von Konstanten

Beitrag von UliTs »

Manfred hat geschrieben:Uli,
so weit war ich auch schon. Aber dann hat es geknallt, weil darin wieder LOCAL Vars waren, die dann natürlich nicht bekannt sind.
Das ist natürlich ärgerlich, aber wenn es immerhin LOCALs sind, würde ich mir die Mühe machen und diese als Parameter übergeben:

Code: Alles auswählen

FUNCTION SAG_JJJJ( xLocal1 )
RETURN(  )

Aufruf:
SAG_JJJ( @xLocal1 )
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten