これは InterSystems FAQ サイトの記事です。
ルーチンやメソッドを実行した際に以下のような<FRAMESTACK>エラーが発生する場合、DOコマンドの発行の入れ子数が多すぎて、それ以上スタック情報を保持できなくなったことを示しています。
<FRAMESTACK> error is reported when the routine has too many nested calls to DO command. You can check the current stack with $STACK value.
可能性として高いのはプログラミング上のミスで再起的なメソッド/ルーチン呼び出しがループしている場合などです。
以下のようなプログラミングを行い、$STACK変数の値を確認することで、スタックのレベルがどのように変化しているのかを確認できます。
main() {
write "main 1: ",$STACK,!
do l1
write "main 2: ",$STACK,!
quit
}
l1() {
write "l1 1: ",$STACK,!
for i=1:1:5 {
do l2(i)
}
write "l1 2: ",$STACK,!
quit
}
l2(x) {
write "l2("_x_") : ",$STACK,!
if x#2=0 {
write "--------", $STACK,!
}
quit
}