Anmelden

View Full Version : Triggerprogramm debuggen



Seiten : [1] 2

harbir
09-01-13, 09:11
Hallo,

lang, lang ist es her, dass ich mal ein Triggerpgm debuggen musste - und jetzt weiss ich nicht mehr, wie das ging...:confused:

Kann mir hier mal wieder jemand auf die Sprünge helfen...

Danke schonmal vorab.

harbir

Robi
09-01-13, 10:36
Ämmm ...

STRDBG TriggerPgmName UPDPROD(*YES)
Breakpoint (F6)
...


oder im Batch

Job anhalten,
STRSRVJOB derJob

dann
STRDBG ...

Job starten
F10
DSPMODSRC
Breakpoint ...


Oder was meinst Du ?

Robi

dschroeder
09-01-13, 10:53
Hallo,

möglicherweise ist ja der Job nicht bekannt oder kann nicht angehalten werden. In dem Fall kann man im Debugger mit dem Befehl sbreak einen Service-Entry-Point setzen setzen. Es spielt dann keine Rolle, welcher Job das ausführt.

Dieter

harbir
09-01-13, 12:34
Hallo,

möglicherweise ist ja der Job nicht bekannt oder kann nicht angehalten werden. In dem Fall kann man im Debugger mit dem Befehl sbreak einen Service-Entry-Point setzen setzen. Es spielt dann keine Rolle, welcher Job das ausführt.

Dieter

Hallo,

ja, der Job ist nicht bekannt...
Kannst Du mir das etwas ausführlicher mit dem Service-Entry-Point erklären?

Danke
harbir

harbir
09-01-13, 12:36
Ämmm ...

STRDBG TriggerPgmName UPDPROD(*YES)
Breakpoint (F6)
...


oder im Batch

Job anhalten,
STRSRVJOB derJob

dann
STRDBG ...

Job starten
F10
DSPMODSRC
Breakpoint ...


Oder was meinst Du ?

Robi

danke... :) , aber das normale debuggen beherrsch ich... ;)

dschroeder
09-01-13, 13:22
Zur Definition eines Service-Entry Points startet man den Debugger für das gewünschte Programm ganz normal mit STRDBG < Programmname>. Dann setzt man auf die gewünschte Zeile einen Breakpoint. Das macht man aber nicht mit der F6-Taste, sondern man gibt auf der Befehlszeile im Debugger sbreak <Zeilennummer> user <Username> ein. (Z.B. "SBREAK 82 user meier"). In diesem Fall wird das Programm in der Zeile 82 gestoppt, sobald der User Meier in irgendeinem Job das Programm aufruft. Wenn das passiert, bekommt man in der Sitzung, in der man den Debugger gestartet hat, eine Meldung "Der Service-Eingangspunkt stoppte bei Zeile 20 in Programm SCR/A in Job ...". Auf diese Meldung geht man dann mit F1. Im Text kann man dann den genauen Job ablesen. In einer 2. Sitzung kann man dann für diesen Job einen STRSRVJOB durchführen und normal debuggen.

Das ist ein wenig umständlich. Einfacher geht es, wenn man RDP einsetzt. Da ist das ganze in der grafischen Oberfläche etwas benutzerfreundlicher gemacht. Aber es ist das gleiche Verfahren.

Gruß,
Dieter

malzusrex
09-01-13, 14:15
Cool

Wieder was dazu gelernt. Das hätte mir bei so manchen batch-programm schon weiter geholfen....

Danke
Ronald

kitvb1
09-01-13, 14:34
Zur Definition eines Service-Entry Points startet man den Debugger für das gewünschte Programm ganz normal mit STRDBG < Programmname>. Dann setzt man auf die gewünschte Zeile einen Breakpoint. Das macht man aber nicht mit der F6-Taste, sondern man gibt auf der Befehlszeile im Debugger sbreak <Zeilennummer> user <Username> ein. (Z.B. "SBREAK 82 user meier"). In diesem Fall wird das Programm in der Zeile 82 gestoppt, sobald der User Meier in irgendeinem Job das Programm aufruft. Wenn das passiert, bekommt man in der Sitzung, in der man den Debugger gestartet hat, eine Meldung "Der Service-Eingangspunkt stoppte bei Zeile 20 in Programm SCR/A in Job ...". Auf diese Meldung geht man dann mit F1. Im Text kann man dann den genauen Job ablesen. In einer 2. Sitzung kann man dann für diesen Job einen STRSRVJOB durchführen und normal debuggen.

Das ist ein wenig umständlich. Einfacher geht es, wenn man RDP einsetzt. Da ist das ganze in der grafischen Oberfläche etwas benutzerfreundlicher gemacht. Aber es ist das gleiche Verfahren.

Gruß,
Dieter
Wo ist das "Like" button? :)

Also, if you don't know what job it is and it is not yet submitted (z.B. if a job is only submitted when a DTAQ entry is received), you can hold the JOBQ until the required job gets submitted.

harbir
09-01-13, 14:35
Zur Definition eines Service-Entry Points startet man den Debugger für das gewünschte Programm ganz normal mit STRDBG < Programmname>. Dann setzt man auf die gewünschte Zeile einen Breakpoint. Das macht man aber nicht mit der F6-Taste, sondern man gibt auf der Befehlszeile im Debugger sbreak <Zeilennummer> user <Username> ein. (Z.B. "SBREAK 82 user meier"). In diesem Fall wird das Programm in der Zeile 82 gestoppt, sobald der User Meier in irgendeinem Job das Programm aufruft. Wenn das passiert, bekommt man in der Sitzung, in der man den Debugger gestartet hat, eine Meldung "Der Service-Eingangspunkt stoppte bei Zeile 20 in Programm SCR/A in Job ...". Auf diese Meldung geht man dann mit F1. Im Text kann man dann den genauen Job ablesen. In einer 2. Sitzung kann man dann für diesen Job einen STRSRVJOB durchführen und normal debuggen.

Das ist ein wenig umständlich. Einfacher geht es, wenn man RDP einsetzt. Da ist das ganze in der grafischen Oberfläche etwas benutzerfreundlicher gemacht. Aber es ist das gleiche Verfahren.

Gruß,
Dieter

Hallo,

danke für die Erklärung.

Noch eine kurze Frage:
Welcher User führt standardmäßig das Triggerpgm aus?
ist das immer der User, der den Trigger auslöst oder ist das ein Systemuser?

VG
harbir

dschroeder
09-01-13, 14:50
Bei "normalen" interaktiven iSeries Jobs müsste das der angemeldete User sein. Bei Batch-Jobs kann das ein anderer User sein. Das kann man ja beim SBMJOB mitgeben. Beim Aufrufen von iSeries-Programmen vom PC aus bin ich mir nicht sicher. Dort ist es ja normalerweiser der QUSER. Aber möglicherweise wird dort auch der Current User verwendet.

Dieter