GNU COBOL
Yapamayacağını söylediler. Aslında, yapılamayacağını söyleyen bendim. Şimdi bitti ve eski bir dil özelliği uygulanan yöntemi kullanarak yeniden uygulandı.
Soru şu şekildedir:
Eğer kaynak koda ek boşluklar veya ifadeler (kodun akışını kesmeyen) eklenirse, çalışma zamanında (varsa derlendikten sonra) yansıtılmalıdır.
DISPLAY
Çıktının başlamasına neden olan üç saniyeden önce herhangi bir miktarda malzeme eklenebilir ve s'den sonraki her şey DISPLAY
"kodun akışını keser", bu yüzden sorun değil.
COBOL TRACE
, basitçe çalıştırılan kaynak satır numaralarını listeleyen bir fiil (deyim) kullanıyordu (programdaki satır numarasına erişim yok). Sınırlı kullanım olmasına rağmen, bir TRACE uygulaması ekledim.
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
.
Çıktı
Perform
Hello World, from line 18!
GO TO
Hello World, from line 20!
Fall through
Hello World, from line 23!
Dili yazma gücünün ve esnekliğinin bir sunumu olarak, bu örnekte aynı anda karışık, tamamen küçük harf ve tamamen büyük harf kullanılır. İşlendiği gibi, her şeyin UPPERCASE'e "katlanmış" olması önemli değildir.
Çalışan programdaki kaynak satır numarasına, çalışan programdan ulaşan tek standart COBOL yolu a DEBUGGING
DECLARATIVE
. Bir içinde SECTION
, kesinlikle bir paragraf içinde SECTION
, böyle bir bildirimin özel siciline erişiminiz vardır DEBUG-LINE
. Bu, kontrolün belirli bir prosedür ismine (paragraf veya SECTION
) aktarılmasına neden olan fiilin (deyim) kaynak satır numarasını içerir .
Yani, ile PERFORM
, ya GO TO
, veya ayıklama bildirim deyimleri de paragrafın "aracılığıyla düşme" SECTION
yürütülür.
Tamam, ancak DISPLAY
kontrol transferine neden olmaz.
Sorun değil. Kontrol transferiyle aynı satıra koyun .
Sorun, "kodun akışını kesmeyen herhangi bir ek boşluk veya ifadeler kaynak koduna eklendiğinde, çalışma zamanında (varsa derlendikten sonra) yansıtılmalıdır."
Dolayısıyla, aynı satıra koyun, ancak bir kontrol aktarımının önüne , içeriğini DISPLAY
iki parçaya bölün (hatırlayın, "Bu bağlamda, dizgeyi çıkaran ifadenin ilk satır numarasının gösterilmesini istiyoruz"). ve kontrol transferinden önce birinci kısmı ve ikinci kısmı DEBUG-LINE
, bir kez hata ayıklama prosedürünün içinden çıkarır.
Son zor bit, "düşmek" içindir ("prosedürler" belirtilebilir PERFORM
, bir hedef GO TO
olabilir veya bir sonraki satırda girilerek girilebilir). Bu durumda, DISPLAY
prosedürü tanımlayan çizgiyi, ancak tanımın önüne koyun .
"Prosedürlerin" ( a
ve b
) isimleri , ile aynı kaynak hattına uymalarını sağlamak için ciddi şekilde kısaltılmıştır DISPLAY
. Kesinlikle bir COBOL prosedür adı, sekizinci sütundan 11. sütuna kadar bir yerden başlamalıdır. Ancak, sözdizimi bu günlerde bu konuda çok daha rahat. Bazı kodla aynı satırda bir işlem adı tanımlayabildiğim kadarıyla. Hatta koda gömülü bile. Bakım ve arada bir tam durma gerekir.
Gösterilen PROCEDURE DIVISION
her tam durak gerekli ve daha fazla değildir.
Derlemek için:
cobc -x -g hiwhere.cbl
Yürütmek için (linux):
COB_SET_DEBUG=Y ./hiwhere
Son olarak, İZLEME (HAZIR / SIFIRLA olmadan) geri dönüşü.
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
.
Çıktı:
1
17
2
18
3
19
20
1, 2 ve 3'ün üç DISPLAY deyiminden çıktıları ve 17, 18, 19 ve 20 "çalıştırılabilir" (hata ayıklamayan) satırların satır numaralarıdır.