GNU COBOL
พวกเขาบอกว่ามันทำไม่ได้ ที่จริงแล้วฉันเป็นคนพูดว่าทำไม่ได้ ตอนนี้ก็เสร็จสิ้นแล้วและมีการใช้ภาษาที่ล้าสมัยอีกครั้งโดยใช้วิธีการที่ใช้
คำถามระบุ:
หากมีการเพิ่มช่องว่างหรือคำสั่งเพิ่มเติมใด ๆ (ซึ่งไม่ได้ขัดขวางการไหลของรหัส) จะถูกเพิ่มลงในซอร์สโค้ดมันควรจะสะท้อนให้เห็นในเวลาทำงาน
จำนวนของสิ่งใด ๆ ที่สามารถแทรกก่อนที่จะมีสามDISPLAY
s ซึ่งเป็นสาเหตุของการเริ่มต้นของการส่งออกและสิ่งหลังจากDISPLAY
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!
ในฐานะที่เป็นนิทรรศการของพลังและความยืดหยุ่นในการเขียนภาษาตัวอย่างนี้ใช้ตัวพิมพ์เล็กตัวพิมพ์เล็กทั้งหมดและตัวพิมพ์ใหญ่ทั้งหมดในเวลาเดียวกัน มันไม่สำคัญว่าเมื่อประมวลผลแล้วทุกอย่างจะ "ถูกพับ" เป็น UPPERCASE
วิธี COBOL DEBUGGING
DECLARATIVE
มาตรฐานเท่านั้นที่จะได้รับเป็นแหล่งบรรทัดจำนวนในโปรแกรมที่ทำงานจากโปรแกรมทำงานอยู่กับ ภายในSECTION
อย่างเคร่งครัดภายในวรรคภายในเป็นของที่ดังกล่าวเปิดเผยคุณมีการเข้าถึงพิเศษลงทะเบียนSECTION
DEBUG-LINE
สิ่งนี้มีหมายเลขบรรทัดแหล่งที่มาของคำกริยา (คำสั่ง) ซึ่งทำให้เกิดการถ่ายโอนการควบคุมไปยังชื่อกระบวนงานเฉพาะ (ย่อหน้าหรือSECTION
)
ดังนั้นด้วยPERFORM
, หรือGO TO
, หรือ "ตกลงมา" ย่อหน้าในการประกาศการดีบักSECTION
จะถูกดำเนินการ
ตกลง แต่DISPLAY
ไม่ทำให้การถ่ายโอนการควบคุม
ไม่มีปัญหา. วางไว้ในบรรทัดเดียวกับการถ่ายโอนการควบคุม
ปัญหาเนื่องจากหาก "เพิ่มช่องว่างหรือคำสั่งเพิ่มเติมใด ๆ (ซึ่งไม่ขัดจังหวะการไหลของรหัส) จะถูกเพิ่มลงในซอร์สโค้ดจึงควรมีผลในเวลาทำงาน (หลังจากรวบรวมถ้ามี)"
ดังนั้นวางไว้บนบรรทัดเดียวกันแต่หน้าการถ่ายโอนการควบคุมแยกเนื้อหาของDISPLAY
เป็นสองชิ้น (จำไว้ว่า "ในบริบทนี้เราต้องการหมายเลขบรรทัดแรกของคำสั่งที่แสดงสตริงที่จะแสดง" ) และเอาท์พุทส่วนแรกก่อนที่จะมีการถ่ายโอนการควบคุมและส่วนที่สองจากDEBUG-LINE
ภายในเมื่อขั้นตอนการดีบัก
บิตสุดท้ายที่ยุ่งยากสำหรับ "fall through" ("โพรซีเดอร์" สามารถเป็นPERFORM
ed สามารถเป็นเป้าหมายของ a GO TO
หรือสามารถป้อนได้ง่าย ๆ โดยการขึ้นบรรทัดถัดไป) ในกรณีนี้วางDISPLAY
อยู่บนเส้นซึ่งได้กำหนดขั้นตอน แต่ในด้านหน้าของคำนิยาม
ชื่อของ "วิธีการ" ( a
และb
) DISPLAY
ได้รับการสั้นลงอย่างรุนแรงเพื่อให้พวกเขาเพื่อให้พอดีกับที่เดียวกันแหล่งที่มาสายเป็น อย่างเคร่งครัดขั้นตอนชื่อโคบอลควรเริ่มต้นที่ไหนสักแห่งจากคอลัมน์ที่แปดถึงคอลัมน์ที่ 11 อย่างไรก็ตามไวยากรณ์คือวันนี้ผ่อนคลายมากขึ้นเกี่ยวกับที่ ในขอบเขตที่ฉันสามารถกำหนดชื่อขั้นตอนในบรรทัดเดียวกันเป็นรหัสบางส่วน ฝังอยู่ในรหัส การดูแลและเป็นครั้งคราวเต็มหยุดจะต้อง
ในการPROCEDURE DIVISION
หยุดเต็มรูปแบบที่แสดงจำเป็นต้องมีและไม่มีอีกต่อไป
เพื่อรวบรวม:
cobc -x -g hiwhere.cbl
ในการดำเนินการ (linux):
COB_SET_DEBUG=Y ./hiwhere
ในที่สุดการกลับมาของ TRACE (โดยไม่พร้อม / 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 เป็นเอาต์พุตจากคำสั่ง DISPLAY สามรายการและ 17, 18, 19 และ 20 เป็นหมายเลขบรรทัดของบรรทัด "ปฏิบัติการ" (ไม่ใช่การดีบัก)