[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    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 user 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

  2. #2
    Registriert seit
    May 2002
    Beiträge
    1.121
    Cool

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

    Danke
    Ronald

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Das Thema Debugging scheint ja für für viele Forumsmitglieder interessant zu sein. Deshalb hier noch ein weiterer Hinweis zum STRDBG: Wenn man STRDBG standardmäßig ausführt, wird der zu debuggende Quelltext im 24x80 Modus angezeigt. Überlicherweise werden die meisten heute, wenn sie denn im SEU editieren, ihren Quelltext im 27x132 Modus anzeigen. Ich weiß nicht, ob bekannt ist, dass man den Debugger auch dazu bringen kann, den Quelltext im 132-Zeichen-Modus anzuzeigen. Dazu muss man vor dem Debugger-Start eine Environment-Variable setzen: ADDENVVAR ENVVAR(ILE_DEBUGGER_1)
    VALUE(ALLOW_WIDE_SCREEN) LEVEL(*JOB)
    Wir haben uns dazu ein eigenes Command "STRDBG132" erstellt, das die Variable setzt und nach dem Ende des Debugvorgangs wieder entfernt.

    Ich meine, dass es ab und zu mal Probleme mit dem "hochauflösenden" Modus geben kann, wenn die Anwendung zwischendurch ein 80-Zeichen Windows sendet. Ich bin mir da aber nicht mehr sicher. Bei uns läuft das jedenfalls ganz gut. Einige Kollegen verwenden den normalen STRDBG, andere den STRDBG132.

    Bei Bedarf kann ich das Command und das zugehörige CL gerne hier posten.

    Aber für die meisten ist das sicherlich ein "alter Hut".

    Gruß,
    Dieter

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Und zum Zurücksetzen auf 24x80 gibt man folgenden Befehl an:
    Code:
    ADDENVVAR ENVVAR(ILE_DEBUGGER_1) LEVEL(*JOB)
    ... und sollte ggf. in einem CL-Programm auf CPFA981 prüfen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Hallo Birgitta,

    ich korrigiere dich nur ungern: Aber zum Zurücksetzen kann man nicht ADDENVVAR verwenden, sondern man muss den Wert mit CHGENVVAR zurücksetzen oder die Variable mit RMVENVVAR entfernen.

    Ich denke aber, dass allen klar war, was du gemeint hast.

    Gruß,
    Dieter

    Zitat Zitat von B.Hauser Beitrag anzeigen
    Und zum Zurücksetzen auf 24x80 gibt man folgenden Befehl an:
    Code:
    ADDENVVAR ENVVAR(ILE_DEBUGGER_1) LEVEL(*JOB)
    ... und sollte ggf. in einem CL-Programm auf CPFA981 prüfen.

    Birgitta

  6. #6
    cbe is offline [professional_User]
    Registriert seit
    May 2005
    Beiträge
    392
    Zitat Zitat von dschroeder Beitrag anzeigen
    ... Ich weiß nicht, ob bekannt ist, dass man den Debugger auch dazu bringen kann, den Quelltext im 132-Zeichen-Modus anzuzeigen.

    ...mir war es neu - habe es gleich eingebaut, weil es mich schon immer genervt hat, dass der Kommentarbereich fehlt.
    Danke + Gruß,
    Christian

  7. #7
    Registriert seit
    Jan 2007
    Beiträge
    189
    Zitat Zitat von dschroeder Beitrag anzeigen
    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 user 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.
    mfg

    Kit
    www.ecofitonline.com
    DeskfIT - ChangefIT - XrefIT

  8. #8
    Registriert seit
    Nov 2012
    Beiträge
    47
    Zitat Zitat von dschroeder Beitrag anzeigen
    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 user 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

  9. #9
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    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

  10. #10
    Registriert seit
    Nov 2012
    Beiträge
    47
    Zitat Zitat von dschroeder Beitrag anzeigen
    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
    Hallo,

    danke, das hat mir sehr weitergeholfen.

    Die Daten in der getriggerten Datei kommen über einen Webservice auf die iSeries und ja, es wird hier der QUSER verwendet.

    VG
    harbir

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    QUSER ist nur Bestandteil des Jobnamens.
    Die SQL-Funktion Current_User bzw. USER liefert den aktuellen User aus der Anmeldung.
    Wenn ein Trigger-Pgm nur den Job-User abfragt (SDS im RPG, RTVJOBA im CL) wird QUSER geliefert.

    Wenn man den richtigen User haben will, sollte man diesen per API/SQL abfragen.

    Diese Information ist nicht statisch!

    Durch die Wiederverwendung von QZDA-Jobs kann der User auch gewechselt werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Debuggen von SQL-Sitzungen
    By Fuerchau in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 01-06-12, 14:58
  2. Debuggen im Batchmodus
    By M Scheid in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 07-11-05, 10:22
  3. SQLCBL debuggen?
    By Cobolaner in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 23-09-05, 09:13
  4. Problem beim Debuggen
    By Flappes in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 21-07-05, 11:14
  5. Trigger Triggerprogramm Objektlock
    By kuempi von stein in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 01-03-05, 12:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •