Debuggen mit CobolIT

TAA unterstützt auch bei der Nutzung von Cobol-IT das Debuggen von Cobol-Code, indem bei Angabe des entsprechenden Implementierungstyps für das Modul der Debugger (in diesem Fall Cobol Development Studio, kurz CDS) gestartet wird.

Der Ityp dafür ist „CobolIT“. Die Ispc enthält die Angabe der Dll und des Entrypoints, wie bei Ityp dllCob32. Prinzipiell kann die Ispc-Angabe somit unverändert bleiben; um aber die Debug-Funktionalität von CDS voll ausschöpfen zu können, empfiehlt es sich, für das zu debuggende Modul eine separate Dll zu erzeugen, die nur dieses Modul enthält, und die Ispc entsprechend anzupassen. Die Befehlszeile für den link wäre z.B.:

cobc <Name>.cbl -m -w -g -debug -preprocess="<preproc.cmd>" -o "<Name>.dll"

Entsprechende Angabe in CDS unter Cobol-Properties:

  • Link: Link dynamically loadable Module,
  • Debug: Produce Debugging Information, enable all runtime error checks.

Falls CDS noch nicht aktiv ist, wird dieses durch TAA gestartet.

Wenn TAA in der Lage ist, das Projekt- und Sourceverzeichnis für CobolIT bzw. CDS.exe aus der Ispc-Angabe abzuleiten, wird beim Starten von CDS versucht, direkt die Verbindung zu dem Prozess herzustellen1). Wenn das nicht funktioniert, oder mit derselben Instanz von CDS eine weitere Debug-Session ausgeführt werden soll, muss die Verbindung manuell hergestellt werden.

Voraussetzungen für automatischen Attach

  • CDS darf noch nicht aktiv sein.
  • Die Config-Datei (CDS.INI oder Registry-Eintrag CobolitDebugIni) muss die Angabe -application com.cobolit.application enthalten. 2)
  • Es muss eine Batch-Datei als preRun-Script übergeben werden. Diese kann in dem Config-Setting CobolitDebugPre angegeben werden; Default ist die mit der Cobolit-Installation ausgelieferte Datei „setenv_cobolit.bat.3)
  • Die Cobol-Source sollte denselben Namen haben wie die dll, mit dem Suffix .cbl.
  • Der Sourcepfad für das Modul muss ermittelt werden können.
  • Der Projektpfad muss ermittelt werden können.

Wenn eine CDS-Version größer 2.0.1 verwendet wird, muss die Befehlzeile für den Aufruf von CDS in der Config-Section der TAA-Registry angegeben werden:

  • CobolItDebugCommandline:

    Befehlszeile mit zu ersetzenden Variablen. Jede Variable wird von % begrenzt und durch den dafür angebenen Wert ersetzt; die Angabe kann in beliebiger Groß/Kleinschreibung erfolgen:

    • %CDSPath% : Pfadname von CDS.EXE. Wird ermittelt anhand der Environment-Variablen CobolItDir bzw. CobolItDir64 (Langname, in Anführungszeichen)
    • %Pid%: ProzessID des zu debuggenden Prozesses
    • %IniFile%: Pfadname der zu verwendenden INI-Datei; wird anhand der Angabe CobolItDebugIni ermittelt.
    • %Project%: Pfadname zum Projekt; wird aus der Ispc des MOduls ermittelt (Kurzname)
    • %Workspace%: Pfadname der Workspace; wird aus der Ispc des MOduls ermittelt (Kurzname)
    • %PreRun%: Pfad zum Setup-Script ; wird anhand der Angabe CobolItDebugPre ermittelt (Kurzname).
    • %PostRun%: Pfad zum PostRun-Script; wird anhand der Angabe CobolItDebugPost ermittelt (Kurzname).

    Default ist die Befehlszeile für CDS 2.0.1, ohne postrun-Angabe:

     %CDSPATH% pid=%PID% --launcher.ini %INIFILE% wDir=%PROJECT% -data %WORKSPACE% preRun=%PRERUN% 

    Die Befehlszeile für CDS 2.0.3 könnte so lauten:

     %CDSPATH% --launcher.ini %INIFILE% -data %WORKSPACE% -cdaPid=%PID% -cdaWorkDir=%PROJECT% -cdaPreRun=%PRERUN% -showLocation

    Es ist damit auch möglich, die Optionen direkt anzugeben, ohne z.B. die Pfadkurznamen von der TAA-Infrastruktur ermitteln zu lassen. Bei Änderung von CobolItDebug-Angaben in der Registry ist ggf. auch die Befehlszeile dort entsprechend anzupassen.4)

Zusätzlich sind folgende Angaben in der Config-Section der TAA-Registry möglich:

  • CobolitDebugPost: Command-Script, das nach dem Debug ausgeführt werden soll. Kein Default.
  • CobolitDebugPre: Command-Script, das vor dem Debug ausgeführt werden soll. Default: „setenv_cobolit.bat“.
  • CobolitDebugIni: Name der CDS Ini-Datei, die fürs Debuggen verwendet werden soll. Default: „CDS.INI“.

Ermittlung der Pfade für Projekt und Workspace

Bei der Ermittlung der Pfade für Projekt- und Sourceverzeichnis wird von folgender Verzeichnisstruktur beim Debuggen ausgegangen:
<Workspace>\<Projekt mit Sources >\[bin\]<dlls>
Unter <dlls> sollte die zu debuggenden Dll stehen (Ispc). Unter <Projekt mit Sources> sollten sowohl die Source-Dateien (.cbl) als auch die Cobolit-Projektinformationen zu finden sein. Wenn diese dort nicht gefunden werden, wird der Pfad weiter nach oben durchsucht. Falls die .cbl-Datei dort nicht gefunden wird, wird anschließend anhand der Konfig-Settings des Moduls, über das Config-Setting SourcePath sowie einen Default-Pfad, zur Zeit K:\\Src\\$V\\$A\\Module\\$D\\$I.$S, versucht, die Source zu finden. Wird die Source unter diesem Namen nicht gefunden, wird ausgehend von dem dll-Pfad nach anderen .cbl-Dateien gesucht.

Wenn in dem Pfad entweder keine Cobolit-Projektinformationen oder keine .cbl-Dateien gefunden werden, ist kein automatischer Attach an CDS möglich.

Manueller Attach

Um die Verbindung manuell herstellen zu können, zeigt TAA eine Messagebox an, in der die Prozess-ID angegeben ist, mit der der Attach von CDS aus erfolgen muss (CDS: rechte Maus auf das Projekt, zu dem das Modul gehört, dann COBOL - Debug Attach). Bestätigen Sie die Messagebox mit OK, nachdem Sie den Attach in CDS vorgenommen haben.

Wenn Sie ohne vorherigen Attach OK klicken, läuft die Anwendung weiter, als wäre kein Debugging angefordert worden.

Wenn man in CDS „Terminate“ wählt, beendet sich der gesamte Prozess, nicht nur das Debuggen!

Andere Möglichkeiten zum Debuggen

Alternativ zu dem Ityp CobolIT kann auch die Angabe debugbreak genutzt werden; bei mit CobolIT implementierten Modulen wird allerdings nicht CDS gestartet und verknüpft, sondern nur die Prozess-ID angezeigt, mit der die Verknüpfung manuell erfolgen kann, wie oben beschrieben.

Als weitere Alternative kann die CobolIT-Umgebungsvariable COB_DEBUG_MODULES genutzt werden; diese sorgt dafür, dass CobolIT bei Erreichen des Moduls anhält und auf einen Attach über CDS wartet. Achtung - wenn man das Zurücksetzen dieser Variablen vergisst, bleibt CobolIT auch bei späteren Ausführungen der Anwendung bei dem Modul stehen, und die Anwendung scheint sich aufgehängt zu haben!

1)
Ab V907
2) , 3)
Diese Information bezieht sich auf CDS 2.0.1, mglw. mit späteren CDS-Versionen nicht notwendig.
4)
Änderung gegenüber 9.07: Bisher wurde, wenn z.B. in der Registry CobolItDebugPost nicht angegeben ist, auch keine Postrun-Option erzeugt.
faq:cobol:debug_cobolit · Zuletzt geändert: 26.11.2019 13:12

Copyright © 1992-2024 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum