PDA

View Full Version : Zeiger für angegebene Position nicht gesetzt.



dschroeder
04-06-20, 10:10
Hallo,

ich suche seit einigen Stunden ein Problem, bei dem unsere Anwendung an einer bestimmten Stelle abstürzt. Im Joblog ist die erste Fehlermeldung " Zeiger für angegebene Position nicht gesetzt."

Das deutet meiner Meinung nach auf einen nicht übergebenen Parameter hin. Hat jemand eine Idee, ob man irgendwie aus der Meldung erkennen kann, in welchem Programm der Parameter fehlt?

Außerdem erhalte ich im Joblog den Fehler:


Nachrichten-ID . . . . : CEE3201 Bewertung . . . . . . : 10
Nachrichtenart . . . . : Diagnose
Sendedatum . . . . . . : 04.06.20 Sendezeit . . . . . . : 11:04:45

Nachricht . . . : Ausnahmerekursion erkannt.
Ursache . . . . : Eine nicht behandelte Ausnahme ist in einer
Ausnahmebehandlung aufgetreten.
Fehlerbeseitigung: Eine Ausnahme, die in der Ausnahmebehandlung auftritt,
darf nicht unbehandelt bleiben.


Ich nehme an, dass das ein Folgefehler vom nicht gesetzten Zeiger ist.

Noch ein Hinweis: Ich kann den Fehler jederzeit reproduzieren. Ich fange jetzt erstmal an, jeden Call bis zum Absturz nachzuvollziehen. Das ist aber echt aufwendig!

Gruß,
Dieter

Sinnar
04-06-20, 10:41
F9 im Joblog geht nicht? - da wird mir sogar die Anweisung angezeigt. (Natürlich nur solange der Job aktiv ist).

dschroeder
04-06-20, 11:32
Klar geht F9. Aber das zeigt mir nur Betriebssystemfunktionen. Ich suche "mein" Programm, in dem der Parameter fehlt. Bei F9 kommt das hier:

Nachrichten-ID . . . . : MCH3601 Bewertung . . . . . . : 40
Sendedatum . . . . . . : 04.06.20 Sendezeit . . . . . . : 12:26:49
Nachrichtenart . . . . : Abbruch
Von . . . . . . . . . : SCHRO970 CCSID . . . . . . . . : 65535

Von Programm . . . . . . . . . : QRNXIE
Von Bibliothek . . . . . . . : QSYS
Von Modul . . . . . . . . . : QRNXMSG
Von Prozedur . . . . . . . . : _QRNX_SIGNAL_EXCP
Von Anweisung . . . . . . . : 1

An Programm . . . . . . . . . : QRNXIE
An Bibliothek . . . . . . . : QSYS
An Modul . . . . . . . . . . : QRNXMSG
An Prozedur . . . . . . . . : _QRNX_SIGNAL_EXCP
An Anweisung . . . . . . . . : 1

Weitere ...

Fuerchau
04-06-20, 12:05
Wenn der MCH auftritt sollte der Job erst mal stehen bleiben damit man u.U. den Callstack noch ansehen kann.

Sinnar
04-06-20, 12:05
ha! sowas hatte ich noch nicht ;-P
sorry.
aber wenn du an dieser Stelle bist und der Stack ja eh angehalten ist, müsste doch im Aufrufstapel dein Programm / deine Prozedur die Anweisungsnummer anzeigen.

dschroeder
04-06-20, 13:33
Erstmal vielen Dank.
Das Programm bleibt leider nicht stehen, sondern schmiert total ab (bei mir bis zur Commando Ebene, bei den Usern zum Hauptmenü) Also bis zur letzten ACTGRP, denke ich.

Robi
04-06-20, 14:02
kannst du evtl. dem MCH3601 ein dump als (automatische / Default )Antwort geben

xenofob
04-06-20, 14:06
Wenn das Programm vom CL angeschoben wird, dann könnte man strdbg aufs CL machen und warten bis das unbekannte Programm (wird ja vom CL aus gecallt) abschmiert. Dann müsste der Debugger greifen

dschroeder
04-06-20, 17:17
Vielen Dank für alle Antworten. Leider war der Programmabbruch so heftig, dass ich keine Möglichkeit gefunden habe, das Programm dort irgendwie anzuhalten. Aber nach langem Debug haben wir das Problem jetzt gefunden und beheben können.
Das Problem steckte in einem Webservice-Aufruf, der über die LIBHTTP-Tools von Scott Klement realisiert wurde. Da hatte ein Kollege nicht mit einem negativen Returncode der http_get_url_raw - Funktion gerechnet und trotz negativem Returncode auf den Speicherbereich der Responsedaten zugegriffen. Letztlich war das Problem, dass eine RPG-Variable zu klein war, um alle Responsedaten (im JSON-Format) aufzunehmen. Jetzt haben wir die Variable wesentlich größer gemacht und reagieren außerdem auf den Responsecode. Das scheint jetzt alles zu klappen.

Der Vertrackte an der ganzen Fehlersituation war, dass das Programm eben nicht direkt an der Stelle abgeschmiert ist, wo der Fehler im Code lag. Es sieht für mich so aus, als hätte der unsaubere Umgang mit dem Speicher an späterer Stelle (in einem ganz anderem Programm) zum Abschmieren geführt.

So ist das eben, wenn man mit Pointern arbeitet ...

Nochmal herzlichen Dank für alle Beiträge.

Viele Grüße,
Dieter