破損が発生した PL/I プロシージャの特定

Open PL/I コンパイラ指令 -initcall は、ユーザー ロジックを呼び出す前に、指定されたルーチンの呼び出しを挿入するという点で、COBOL の initcall 指令に似ています。次の手順に従ってください。

  1. DEBINIT の例」トピックで提供されている DEBINIT プログラムを、Windows PATH または UNIX LD_LIBRARY_PATH システム環境変数に含まれるディレクトリに .dll または .so としてコンパイルします。
  2. -initcall DEBINIT および -ctf 1,16 指令を使用してアプリケーション全体を再コンパイルします。詳細については、「コンパイラ オプション」を参照してください。
  3. 問題を再現します。
  4. CTF トレースを確認します。

DEBINIT プログラムからのメッセージで、特定のプロシージャに入るときに破損が発生したことが示されます。これを特定する (少なくとも何らかの呼び出しでメモリが破損したことを確認する) には、CTF トレースを逆方向に進めて、呼び出し元プロシージャのイベントから対応する「7」イベントがない「6」イベントを見つけます。トレースには対応する 6/7 イベントのペアがエントリごとに含まれるため、対応する 7 イベントのない 6 イベントは破損を示します。

問題を特定できない場合は、次の方法を任意の順序で試してください。

これまでに紹介した方法を使用してもメモリ破損の原因となっている場所を簡単に特定できない場合は、「例:マクロを使用したヒープ破損の分離」で示す手法を試してください。