エラー時の行番号について
皆さん
こんにちは。
最近ではVSCodeでIRISのプログラミングを行っている方も多いと思います。
クラスメソッドなんかをコーディングし、実行してエラーとなった場合に、以下のようなエラーメッセージが取得できると思います。
> <UNDEFINED> zNewMethod+32^ClassName.1
これは、NewMethodというメソッド内の32行目でUNDEFINEDが発生した事を指していますが、これは実際にはClassName.clsのNewMethod内の32行目ではなく、ClassName.1というルーチン(int)のzNewMethodでの32行目を示しています。
.clsから生成されるintは空行が削られたり、複数ルーチンに分割されたりしますので、実際のClassName.clsを開いてNewMethodの32行目を見ても実際のエラー箇所では無い場合があります。
VSCodeで開発をしていると、これが結構面倒なのですが、エラーメッセージに出力される行番号を .clsや、.mac 上での行番号に変える方法があれば教えて頂きたく、よろしくお願い致します。
Hashimotoさん
)
こんにちは。
IRISスタジオだと「他の表示」で表示されたINTコード上で、エラーの行にカーソルを持っていき、
再度「他の表示」をクリックすると対応するソースコードに移るのでなんらかの方法はあるかと
思い、調べてみました。(%SYS.MONLBLで...
Internalクラスなので、インターシステムズのサポートは無く、将来的に変わる可能性はありますが、以下の方法で求められそうです。
まず以下のメソッドでエラーのロケーション形式( label+offset^routine )から、INTルーチンの先頭からのoffsetを求めます。
で、sc=1の場合、intnameにはINTルーチン名、intlineには先頭からのオフセットが入ります。
次に、以下のメソッドでソースコードのロケーションを求めます。
sc=1の場合、変数mapは以下の形式で返ります。
ちなみに、SourceLine()メソッドの第2~5引数は
startLine, startPos, endLine, endPos
となっており、どうもエディタ上で選択した範囲を入力すると、それに対応するソースコードの範囲を計算してくれるようです。
その場合、変数mapはこんな感じになります。
Minamoto さん
貴重な情報ありがとうございます。
面白そうですね。ちょっと色々と触ってみたいと思います。
ちなみにスタジオで、INTから再度「他の表示」で元のソースに戻れるのには気づいてませんでした(笑)