सी

2012-12-30 40 views
5

में संरचनाओं और चरों को स्वचालित रूप से प्रिंट करना मैं 4-5 .c फ़ाइलों (लगभग 2000 से 5000 लाइनों प्रत्येक) के साथ काम कर रहा हूं जिसमें कई शीर्षलेख शामिल हैं। वर्तमान में मेरे पास कोई डीबग प्रिंट नहीं है जो प्रोग्राम को डीबग करने में मेरी सहायता करेगा निष्पादन के दौरान ।सी

मेरा प्रश्न है: - वहाँ एक रास्ता (या कुछ मौजूदा उपकरण) ग फ़ाइलों को पार्स और प्रिंट के नए सेट ग फ़ाइल में मौजूदा दायरे में सभी चर के लिए बयान को जोड़ने के लिए है? वीसी ++ के समान ही हमें स्थानीय और ग्लोबल्स आदि देखने की अनुमति मिलती है। मुझे उन्हें प्रत्येक चरण में मुद्रित करने की आवश्यकता है। इसके अलावा, पॉइंटर्स को संदर्भित किया जाना चाहिए।

पूर्व के लिए। चलो .c फ़ाइल में एक बिंदु पर कहें, 10 वैश्विक चर और 3 स्थानीय हैं। मुझे उस बिंदु पर इन 13 चरों को मुद्रित करने के लिए स्मार्ट प्रिंटफेज जेनरेट करने की आवश्यकता है। बाद में प्रोग्राम में 20 चर हैं, तो मुझे 20 चर आदि को प्रिंट करने में सक्षम होना चाहिए। शामिल हेडर फ़ाइलों में इनमें से प्रत्येक
चर के लिए सभी प्रासंगिक घोषणाएं शामिल हैं (जो संरचनाएं/पॉइंटर्स/सरणी या कुछ हो सकती हैं संयोजन इत्यादि) मैं इसे पर्ल स्क्रिप्ट के माध्यम से प्राप्त करने की कोशिश कर रहा था।

मैं है कि क्या किया था, मैं preprocessed फ़ाइल (मैं फाइल) उत्पन्न होती है और मैं पर्ल के माध्यम से इसे पार्स करने की कोशिश की और फिर प्रत्येक चर के लिए विशिष्ट व्यक्ति प्रिंट कार्यों उत्पन्न है, लेकिन एक आधे दिन का प्रयास के बाद मैं महसूस किया कि अपने बस बहुत समय लेने वाला। क्या कोई ऐसा उपकरण है जो पहले से ही करता है? यदि ऐसा नहीं है, तो इसके करीब कुछ भी अच्छा होना चाहिए पर्याप्त (जिस पर मैं कुछ पर्ल प्रसंस्करण इत्यादि लागू कर सकता हूं) मेरा लक्ष्य यह है कि प्रोग्राम निष्पादन के दौरान प्रोग्राम निष्पादन के दौरान प्रत्येक चरण में, मैं चर को देखने में सक्षम होना चाहिए (उस दायरे पर मान्य) डीबगर का आह्वान किए बिना।

मुझे .c फ़ाइलों को संसाधित करने और उन्हें दोबारा लिखने की अनुमति है आदि। आशा है कि मेरा प्रश्न स्पष्ट है और आपके उत्तरों के लिए धन्यवाद।

+1

.. आपको भी एक उत्तर मिल सकता है। पैराग्राफ के बीटीडब्ल्यू सुनवाई? –

+0

सर्वश्रेष्ठ जवाब कैसे चुनें ?? –

+2

इसके बगल में स्थित चेक मार्क पर क्लिक करें, इसे भूरे रंग से हरे रंग में बदलना चाहिए – Fingolfin

उत्तर

3

मान लीजिए कि आपके सी प्रोग्राम को फ्रामा-सी के मूल्य विश्लेषण द्वारा व्याख्या किया जा सकता है, जो किसी दिए गए से बहुत दूर है, आप प्रोग्राम के प्रत्येक बिंदु पर या बिंदुओं पर सभी जीवित चर के मानों का लॉग प्राप्त करने के लिए इसका उपयोग कर सकते हैं ब्याज की।

int x = 1; 

main(){ 
    int l; 

    x=2; 
    Frama_C_dump_each(); 
    l=3; 
    Frama_C_dump_each(); 
    { 
    int blocklocal = l + 1; 
    Frama_C_dump_each(); 
    x = blocklocal + 1; 
    Frama_C_dump_each(); 
    } 
    Frama_C_dump_each(); 
    return 0; 
} 

इस कार्यक्रम पर frama-c -val -slevel 1000000000 -no-results t.c रनिंग लॉग पैदा करता है:

निम्नलिखित कार्यक्रम पर विचार करें

[value] Values of globals at initialization 
     x ∈ {1} 
[value] DUMPING STATE of file t.c line 7 
     x ∈ {2} 
     =END OF DUMP== 
[value] DUMPING STATE of file t.c line 9 
     x ∈ {2} 
     l ∈ {3} 
     =END OF DUMP== 
[value] DUMPING STATE of file t.c line 12 
     x ∈ {2} 
     l ∈ {3} 
     blocklocal ∈ {4} 
     =END OF DUMP== 
[value] DUMPING STATE of file t.c line 14 
     x ∈ {5} 
     l ∈ {3} 
     blocklocal ∈ {4} 
     =END OF DUMP== 
[value] DUMPING STATE of file t.c line 16 
     x ∈ {5} 
     l ∈ {3} 
     =END OF DUMP== 

Frama_C_dump_each() बयान मैन्युअल मेरे द्वारा डाला गया है, लेकिन आप भी इतनी है कि दुभाषिया लिए प्रेरित कर सकता है यह प्रत्येक कथन पर स्वचालित रूप से एक राज्य को डंप करता है।

काम करने के लिए इस दृष्टिकोण के लिए, आप अपने कार्यक्रम की पूरी स्रोत कोड, मानक पुस्तकालय कार्यों सहित (strlen(), memcpy(), ...) की जरूरत है और आप main() समारोह की शुरुआत में कड़ी मेहनत से कोड इनपुट के मूल्यों चाहिए। अन्यथा, यह स्थिर विश्लेषक के रूप में व्यवहार करेगा कि यह वास्तव में सी दुभाषिया के रूप में व्यवहार करने की बजाय है।

तुम भी GUI का उपयोग अपने कार्यक्रम में चरों के मान निरीक्षण करने के लिए कर सकता है, लेकिन अगर यह रैखिक नहीं है, बयान है कि कई बार तो फ़ंक्शन कॉल की वजह से या क्योंकि छोरों के दौरा कर रहे हैं सभी मूल्यों है कि लिया जा सकता है दिखाएगा निष्पादन के दौरान।

+0

धन्यवाद। मैं इसे आज़माउंगा। –