2011-07-13 12 views
7

में SWIG द्वारा लिपटे साझा साझा लाइब्रेरी को डिबग करना मैंने पर्ल में SWIG का उपयोग करके अपना सी/सी ++ कोड लपेट लिया है। लिपटे कोड के कारण मेरे पास कुछ सेगमेंटेशन गलती है। मैं पर्ल स्क्रिप्ट के साथ ddd का उपयोग करने की कोशिश कर रहा हूं लेकिन दुर्भाग्यवश अगर मैं स्क्रिप्ट की एक पंक्ति (एक कॉलिंग सी/सी ++ कोड) पर ब्रेकपॉइंट सेट करता हूं, तो ddd सी/सी ++ कोड में नीचे जाने में सक्षम नहीं है।पर्ल

क्या मैं अपने सी lib में ब्रेकपॉइंट सेट करने का कोई तरीका है जब मैं पर्ल कोड डिबग कर रहा हूं या जब आप इस पर्ल स्क्रिप्ट को चला रहे हैं तो सी lib को डीबग करने के लिए आपको एक अच्छा तरीका/उपकरण पता है?

मैं लिनक्स/जीसीसी का उपयोग कर रहा हूं।

उत्तर

6

मैं एक साधारण काम किया है। मैंने gdb को सीधे perl दुभाषिया पर बुलाया।

gdb /usr/bin/perl 
    (gdb) r myscript 
    #block the script someway or rerun it 
    (gdb) b whatever_my_function 

ऐसा लगता है कि एक बार जब विज्ञान चल रहा है तो साझा स्मृति भी स्मृति में लोड हो जाती है। एक बार ऐसा होने के बाद, मैंने डिबगिंग के लिए सभी जानकारी, फ़ंक्शंस और ब्रेकपॉइंट उपलब्ध कराया है।

+0

अगर मैं कमोडो का उपयोग कर रहा हूं तो मैं इसे कैसे डिबग कर सकता हूं? – rpg

+0

हाय आरपीजी। मुझे पता नहीं है। मेरे पास एक नज़र थी और कमोडो एक आईडीई डीबगिंग विशेष रूप से PERL स्क्रिप्ट लगता है। मुझे पता नहीं है कि क्या सी/सी ++ निर्देशों को डीबग करने में सक्षम है जब पर्ल साझा पुस्तकालयों को कॉल करता है। जीडीबी के साथ प्रारंभिक बिंदु PERL दुभाषिया के लिए बाइनरी है। ब्रेकपॉइंट सी/सी ++ कोड की एक पंक्ति में सेट है जो पर्ल स्क्रिप्ट की एक पंक्ति में नहीं है। –

0

मैंने टीसीएल से सी ++ को कॉल करने के लिए केवल SWIG का उपयोग किया है, और विजुअल स्टूडियो का उपयोग करके इसे डीबग किया है, लेकिन आपके विचारों के लिए भी वही विचार लागू होना चाहिए। मैं वर्णन करूंगा कि मैंने डीबग करने के लिए क्या किया है, उम्मीद है कि आप यह समझ सकते हैं कि इसे अपनी स्थिति में कैसे लागू किया जाए।

  • बिल्ड सी के एक डिबग संस्करण ++ मॉड्यूल
  • TCL स्क्रिप्ट डिबग संस्करण (मॉड्यूल के डिबग संस्करण के लिए TCL load आदेश अंक में पथ)
  • में रखें breakpoints शामिल है सुनिश्चित करें सी ++ कोड
  • विजुअल स्टूडियो डीबगर के माध्यम से टीसीएल स्क्रिप्ट को आमंत्रित करें; उदाहरण के लिए इस्तेमाल किया आदेश tclsh85.exe MyScript.tcl

HTH