ग्नू कोबोल
खैर, उन्होंने कहा कि यह नहीं किया जा सकता है। दरअसल, यह मैं ही था जिसने कहा कि यह नहीं किया जा सकता है। अब यह किया गया है, और एक अप्रचलित भाषा सुविधा लागू की गई विधि का उपयोग करके फिर से लागू की गई है।
प्रश्न कहता है:
यदि कोई अतिरिक्त व्हाट्सएप या स्टेटमेंट (जो कोड के प्रवाह को बाधित नहीं करता है) स्रोत कोड में जोड़ा जाता है, तो इसे रन-टाइम (यदि लागू हो तो संकलन करने के बाद) पर प्रतिबिंबित किया जाना चाहिए।
सामान की किसी भी राशि डाला जा सकता है तीन से पहले DISPLAY
रों जो उत्पादन के शुरू होने से, और कुछ भी कारण के बादDISPLAY
रों होगा, ताकि के ठीक "कोड के प्रवाह को बाधित किया"।
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
, या डिबगिंग declaratives में पैरा "के माध्यम से गिरावट" SECTION
निष्पादित किया जाता है।
ठीक है, लेकिन DISPLAY
नियंत्रण के हस्तांतरण का कारण नहीं बनता है।
कोई बात नहीं। इसे नियंत्रण के हस्तांतरण के रूप में एक ही पंक्ति पर रखें ।
समस्या, चूंकि "किसी भी अतिरिक्त व्हाट्सएप या स्टेटमेंट (जो कोड के प्रवाह को बाधित नहीं करते हैं) को स्रोत कोड में जोड़ा जाता है, इसे रन-टाइम (यदि लागू हो तो संकलन करने के बाद) में परिलक्षित होना चाहिए"।
तो, इसे उसी लाइन पर रखें, लेकिन नियंत्रण के हस्तांतरण के सामने , DISPLAY
दो टुकड़ों में सामग्री को विभाजित करें (याद रखें, "इस संदर्भ में, हम कथन की पहली पंक्ति संख्या चाहते हैं जो प्रदर्शित होने वाले स्ट्रिंग को आउटपुट करता है" ) और DEBUG-LINE
डिबगिंग प्रक्रिया के अंदर एक बार कंट्रोल से ट्रांसफर करने से पहले और दूसरे भाग से आउटपुट मिलता है ।
अंतिम मुश्किल बिट "गिरने के माध्यम से" के लिए है ("प्रक्रियाएं" PERFORM
एड हो सकती हैं GO TO
, एक का लक्ष्य हो सकता है , या बस अगली पंक्ति के साथ दर्ज किया जा सकता है)। इस उदाहरण में, DISPLAY
उस पंक्ति को रखें जो प्रक्रिया को परिभाषित करती है, लेकिन परिभाषा के सामने ।
"प्रक्रियाओं" ( a
और b
) के नामों को गंभीर रूप से छोटा कर दिया गया है ताकि उन्हें उसी स्रोत-रेखा पर फिट होने दिया जा सके DISPLAY
। सख्ती से एक COBOL प्रक्रिया-नाम कॉलम आठ से कॉलम 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 तीन प्रदर्शन बयानों से आउटपुट हैं, और 17, 18, 19 और 20 "निष्पादन योग्य" (गैर-डीबगिंग) लाइनों की पंक्ति संख्या हैं।