PDA

View Full Version : Gemeinsames Kommando für STRDBG/STRISDB ?



cbe
27-07-07, 12:49
Hallo,

nachdem ich mich lange genug damit rumgeärgert habe, dass ich vor dem Debug immer raten muss, ob das Programm sich mit STRDBG oder mit STRISDB verarbeiten lässt, will ich das mal ändern.

Ich möchte nicht alle bestehenden Programme neu wandeln, deshalb kam ich auf die Idee, ein eigenes Kommando zu erstellen, das abh. vom Programmobjekt den entspr. Debugger aufruft.

Dafür müsste ich aber dem Objekt ansehen, wie es umgewandelt wurde.
Wisst Ihr vielleicht, ob man diese Info per Programm rausbekommen kann?
Bei RTVOBJD fand ich zumindest nichts.

Gruß
Christian

kuempi von stein
27-07-07, 14:47
Hallo,

so ganz verstehe ich noch nicht.
Was meinst Du mit "wie es umgewandelt ist"?
Ich dachte immer STRDBG geht immer und STRISDB nur bei OPM RPG, CLP und COBOL?

Sprich ILE mit STRDBG und den Rest mit STRISDB? Ist das Dein Ziel?

Dann sollte doch aber RTVOBJD funktionieren? Da gibt es doch den Parameter OBJATR?

Und ansonsten könnte man ja im CL immer erst mit STRISDB versuchen, Fehlermeldung abfangen und wenn Fehler dann eben STRDBG?

kuempi

cbe
27-07-07, 15:28
Hallo,

beim wandeln kann ich bei "alten" Programmen z.B. sagen:
... OPTION(*LSTDBG),

dann kann ich anschließend sogar RPT-Programme mit STRDBG debuggen mit:
STRDBG ... OPMSRC(*YES)

Nur sind halt noch viele alte Programme nicht so umgewandelt. Da bringt STRDBG keinen Fehler, aber tut halt nicht.

Gruß,
Christian

Fuerchau
27-07-07, 15:42
Da gibt es leider nur MI-Befehle.
An jedem Objekt kann ein Space-Objekt "angehängt" werden.
Mit den entsprechenden MI's kann man darauf zugreifen um die Existenz von Debugdaten zu prüfen.

Übrigens:
STRDBG geht immer, nur nicht immer im Source-Mode.
Wenn man noch einen Spool hat, kann man mit ADDBKP, DSPPGMVAR u.ä. das Programm testen.
Zugegeben, nicht sehr komfortabel.

cbe
30-07-07, 08:34
...
Und ansonsten könnte man ja im CL immer erst mit STRISDB versuchen, Fehlermeldung abfangen und wenn Fehler dann eben STRDBG?

kuempi
das war eine gute Idee!
Sorum habe ich es nicht hinbekommen, da ich nach Möglichkeit STRDBG verwenden möchte und nicht den ISDB.

Aber einfach STRDBG aufrufen und dann schauen, wie der Debugger reagiert, das geht.
Wen es interessiert hier das Ergebnis:



CMD PROMPT('Starten Debugger abh. vom Typ')

PARM KWD(PGM) TYPE(OBJ1) MIN(1) +
PROMPT('Programmname')

PARM KWD(SRCM) TYPE(*CHAR) LEN(10) CHOICE('Name') +
PROMPT('Quelle Teildatei')
PARM KWD(SRCF) TYPE(OBJ2) MIN(1) PROMPT('Quelle +
Datei')

OBJ1: QUAL TYPE(*NAME) LEN(10) CHOICE('Programmname')
QUAL TYPE(*NAME) LEN(10) CHOICE('Bibliothek')

OBJ2: QUAL TYPE(*NAME) LEN(10) CHOICE('Dateiname')
QUAL TYPE(*NAME) LEN(10) CHOICE('Bibliothek')

PGM PARM(&PGMOLB &SRCMBR &SRCFLB)

DCL VAR(&PGMOLB) TYPE(*CHAR) LEN(20)
DCL VAR(&SRCMBR) TYPE(*CHAR) LEN(10)
DCL VAR(&SRCFLB) TYPE(*CHAR) LEN(20)

DCL VAR(&PGMLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&PGM ) TYPE(*CHAR) LEN(10)
DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&SRCFIL) TYPE(*CHAR) LEN(10)

DCL VAR(&MHKTOOL) TYPE(*CHAR) LEN(10)


/* Standardwerte + Initialisierungen */
CHGVAR VAR(&PGM ) VALUE(%SST(&PGMOLB 1 10))
CHGVAR VAR(&PGMLIB) VALUE(%SST(&PGMOLB 11 10))
CHGVAR VAR(&SRCFIL) VALUE(%SST(&SRCFLB 1 10))
CHGVAR VAR(&SRCLIB) VALUE(%SST(&SRCFLB 11 10))
IF COND(&SRCMBR = ' ') THEN(CHGVAR VAR(&SRCMBR) +
VALUE('*N'))
IF COND(&SRCFIL = ' ') THEN(CHGVAR VAR(&SRCFIL) +
VALUE('*N'))
IF COND(&SRCLIB = ' ') THEN(CHGVAR VAR(&SRCLIB) +
VALUE('*N'))


/* Debugger prüfen */
STRDBG PGM(&PGMLIB/&PGM)
DSPBKP OUTPUT(*PRINT) PGM(*ALL)
MONMSG MSGID(CPF1906 CPF1999) EXEC(GOTO +
CMDLBL(L_STRDBG))
ENDDBG
DLTSPLF FILE(QPDBGDSP) SPLNBR(*LAST)
MONMSG MSGID(CPF0000)


L_ISDB:
STRISDB PGM(&PGMLIB/&PGM) SRCMBR(&SRCMBR) +
SRCF(&SRCLIB/&SRCFIL)
MONMSG MSGID(CPF0000) EXEC(DO)
?STRISDB PGM(&PGMLIB/&PGM) SRCMBR(&SRCMBR) +
SRCF(&SRCLIB/&SRCFIL)
ENDDO
GOTO CMDLBL(ENDE)


L_STRDBG:
GOTO CMDLBL(ENDE)



ENDE: ENDPGM

Kann man bestimmt noch verschönern, ist auch nicht auf Herz+Nieren getestet, aber es funktioniert schon mal für RPGLE, RPT mit+ohne *LSTDBG.

Vieren Dank Euch beiden! :)
Christian