GNU COBOL
まあ、彼らはそれができないと言った。実際、それができないと言ったのは私でした。これで完了です。廃止された言語機能は、適用されたメソッドを使用して再実装されました。
質問の状態:
ソースコードに追加の空白またはステートメント(コードのフローを中断しない)が追加された場合、実行時に反映されます(該当する場合はコンパイル後)。
ものの任意の量は、前3に挿入することができDISPLAY
、出力の開始を引き起こし、S、および何も後DISPLAY
それではOKという、s「は、コードの流れを中断」でしょう。
COBOLは、TRACE
実行時にソース行番号を単純にリストした動詞(ステートメント)を使用していました(プログラムの行番号にアクセスできません)。用途は限られていますが、TRACEの実装を含めました。
ID Division.
Program-ID. HIWHERE.
ENVIRONMENT DIVISION.
configuration section.
source-computer. TinkerToy with debugging mode.
Procedure Division.
Declaratives.
Debug-Declaratives Section.
Use For Debugging on a b
.
Debug-Declaratives-Paragraph.
Display Debug-Line "!"
.
End Declaratives
.
Main-Program Section.
DISPLAY "Perform"
Display "Hello World, from line " no advancing Perform b
display "GO TO"
Display "Hello World, from line " no advancing GO TO a
.
a.
dISPLay "Fall through"
Display "Hello World, from line " no advancing. b.
The-Last-bit-OF-the-PROGRAM.
GOBACK
.
出力は
Perform
Hello World, from line 18!
GO TO
Hello World, from line 20!
Fall through
Hello World, from line 23!
言語を記述する力と柔軟性を示すために、この例では大文字と小文字が混在し、完全に小文字、完全に大文字を使用しています。処理されると、すべてが大文字に「折り畳まれる」ので問題ではありません。
実行中のプログラムから実行中のプログラムのソース行番号を取得する唯一の標準COBOL方法は、を使用することDEBUGGING
DECLARATIVE
です。内SECTION
、厳密には内の段落内、SECTION
そのような宣言の中で、special-registerにアクセスできますDEBUG-LINE
。これには、特定の手続き名(段落またはSECTION
)に制御を移した動詞(文)のソース行番号が含まれます。
そのため、、PERFORM
またはGO TO
、または「フォールスルー」を使用して、デバッグ宣言の段落SECTION
が実行されます。
わかりましたが、DISPLAY
コントロールの転送は発生しません。
問題ない。それを上に置くと同じライン制御の転送など。
問題は、「コードのフローを中断しない追加の空白またはステートメントがソースコードに追加された場合、実行時に反映される必要があるためです(該当する場合はコンパイル後)」。
したがって、同じ行に配置しますが、コントロールの転送の前に、コンテンツDISPLAY
を2つに分割します(「このコンテキストでは、表示する文字列を出力するステートメントの最初の行番号が必要です」 )制御の転送前に最初の部分を出力しDEBUG-LINE
、デバッグ手順の内部で、から2番目の部分を出力します。
最後のトリッキーなビットは「フォールスルー」用です(「手順」をPERFORM
編集するか、aのターゲットにするGO TO
か、単に次の行を入力するだけで入力できます)。この例DISPLAY
では、プロシージャを定義する行で、定義の前にを配置します。
「プロシージャ」(a
およびb
)の名前は、と同じソース行に収まるように大幅に短縮されていDISPLAY
ます。厳密には、COBOLプロシージャー名は8桁目から11桁目までのどこかに開始する必要があります。しかし、最近では、構文ははるかに緩和されています。あるコードと同じ行にプロシージャ名を定義できる範囲で。コードに埋め込まれていても。ケアと、たまにフルストップが必要です。
PROCEDURE DIVISION
示されている各フルストップでは必須であり、これ以上はありません。
コンパイルします:
cobc -x -g hiwhere.cbl
実行するには(Linux):
COB_SET_DEBUG=Y ./hiwhere
最後に、TRACEの戻り(READY / RESETなし)。
ID Division.
Program-ID. tRacE.
ENVIRONMENT DIVISION.
configuration section.
source-computer. TinkerToy with debugging mode.
Procedure Division.
Declaratives.
Debug-Declaratives Section.
Use For Debugging on a
.
Debug-Declaratives-Paragraph.
Display Debug-Line
.
End Declaratives
.
Main-Program Section.
* Just append "perform a" to a single-line statement.
DISPLAY "1" . perform a
Display "2" . perform a
display "3" . perform a
* Or prepend "perform a." for a multi-line statement, or a
* statement which won't "come back".
perform a. GOBACK
.
a.
CONTINUE
.
出力は次のとおりです。
1
17
2
18
3
19
20
ここで、1、2、および3は3つのDISPLAYステートメントから出力され、17、18、19、および20は「実行可能」(デバッグなし)行の行番号です。