2011-12-07 9 views
11

प्रक्रिया करने के लिए संलग्न हो सकता है मेरी कंपनी का एक प्रोग्राम है जो लूआ को अपने रनटाइम में एम्बेडेड करता है, डिस्क से .lua फ़ाइलों को लोड करता है और बार-बार परिभाषित कार्यों को निष्पादित करता है।लुआ डीबगर जो

क्या चल रहे प्रक्रिया से जुड़ने का कोई तरीका है और मेरे .lua फ़ाइलों में ब्रेकपॉइंट सेट करें? (मैं लुआ वितरण, या शायद एक तीसरे पक्ष के आईडीई कि दृश्य-स्टूडियो की तरह जीयूआई breakpoints प्रदान करता है के हिस्से के रूप gdb शैली कमांड लाइन डिबगिंग को स्वीकार करता हूँ।)

या मैं क्या कर रहा हूँ है रनटाइम की प्रकृति को डिस्क से यादृच्छिक फाइलों को लोड करने की प्रकृति को पूरी तरह से बकवास और असंभव मांगना?

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

require 'remdebug.engine'.start() 

यह RemDebug लुआ डिबगर इंजन शुरू होता है और एक नियंत्रक से कनेक्ट करने की कोशिश करता है:

उत्तर

4

यह एक विकल्प है जिसका उपयोग मैं बहुत अधिक खोज के बाद करता हूं। यदि आपके पास बाहरी निष्पादन योग्य है जो लुआ लोड करता है, तो मुझे यह कुछ मिनटों में काम कर रहा है। ओप बहुत उत्तरदायी है, इसमें एक इंटरैक्टिव डीबगर है जो आपके कोड को लोड करता है आप डीबग पॉइंट्स को इंटरैक्टिव रूप से रख सकते हैं। इसमें कोई संपादक नहीं है, लेकिन मैं स्केट या किरमिजी संपादक का उपयोग करता हूं और निष्पादन योग्य शुरू करता हूं, आपके मुख्य लुआ मॉड्यूल में एक पंक्ति डीबगर को सक्षम करती है।

http://www.cushy-code.com/grld/ - इस लिंक मृत अब

मैं eclipse.org/ldt में चले गए हैं यह एक आईडीई और एकीकृत डीबगर है, की सिफारिश की

hth

+0

मैं http://www.eclipse.org/koneki/ldt/ पर स्थानांतरित हो गया हूं, इसमें एक आदर्श और एकीकृत डीबगर है, अनुशंसित – daven11

+0

ऊपर दिया गया लिंक मृत है। –

9

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

इस बीच, यदि आप Lua Development Tools आपके लिए काम करते हैं तो आप कोशिश कर सकते हैं। यह एक debugger RemDebug के समान है, जो स्थापित करने के लिए संभव के रूप में निम्नानुसार होना चाहिए विशेषताएं:

require("debugger")(host, port, idekey) 

वैकल्पिक रूप से, आप SciTE-debug, जो SciTE संपादक को एक विस्तार है उपयोग कर सकते हैं, और RemDebug करने के लिए एक नियंत्रक के रूप में काम कर सकते हैं। बस आपको अपने लुआ कोड में कहीं remdebug.engine.start करने के लिए कॉल डालें और SciTE उत्पादन विंडो में इस डालने सुनिश्चित करें:

:debug.target=remote.lua 

जब आप अपने कार्यक्रम शुरू, SciTE स्रोत और वर्तमान पंक्ति को दिखाना चाहिए।

5

मुझे लगता है कि के लिए Decoda संपादक का उपयोग किया गया है लगता है।यह आपको एक चल रहे C++ एप्लिकेशन से अटैच करने की अनुमति देता है, उसके बाद यह पता लगाता है कि आप अपने सी ++ कोड में लूआ इंटरप्रेटर चला रहे हैं और अपना लुआ स्रोत कोड दिखाएं, जहां आप बीकपॉइंट जोड़ सकते हैं और सामान्य रूप से चर का निरीक्षण कर सकते हैं।

1

आपको शायद Decoda का उपयोग करना चाहिए।
अपनी प्रक्रिया को संलग्न करने के लिए Debug -> Processes -> Attach पर जाएं। यह ठीक काम करना चाहिए।

2

Lua plugin for IntelliJ में आपके लूआ दुभाषिया को इंगित करने के अलावा किसी भी विशेष सेटअप के साथ एक काम करने वाला डीबगर नहीं है।

यहाँ इसके बारे में एक स्क्रीनकास्ट है:

http://www.screencast.com/t/CBWIkoZPg

+1

मैं इस तरह से सरल चीजों को डीबग कर सकता हूं, लेकिन मैं काम नहीं कर सकता कि कैसे "बस्टेड" यूनिट परीक्षणों को डीबग करना है। कोई सुझाव? –

3

क्या मीकल Kottman वर्णित की तरह, मैं RemDebug के आधार पर एक डिबगर लागू कर दिया है, लेकिन अतिरिक्त सुधारों और सुविधाओं के साथ (GitHub पर: https://github.com/pkulchenko/MobDebug)।

आप उस बिंदु पर require("mobdebug").start("localhost", 8171) के साथ अपनी .lua फ़ाइल अपडेट कर सकते हैं जहां आप डिबगिंग शुरू करना चाहते हैं। इसके बाद आप आदेश निष्पादित करने के लिए कमांड लाइन डीबगर का उपयोग कर सकते हैं, ब्रेकपॉइंट्स सेट कर सकते हैं, अभिव्यक्ति का मूल्यांकन/निष्पादित कर सकते हैं और इसी तरह।

एक विकल्प के रूप में, आप ZeroBrane Studio IDE का उपयोग कर सकते हैं, जो डीबगर के साथ एकीकृत होता है और आपको अपना कोड लोड करने के लिए फ्रंट एंड देता है और एक अच्छा जीयूआई में एक ही डीबगर कमांड निष्पादित करता है। यदि आप कार्रवाई में आईडीई देखना चाहते हैं, तो मेरे पास यहां एक साधारण डेमो है: http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style

-1

खैर सबसे आसान तरीका यह है, प्रतिभाशाली लेखक https://github.com/slembcke/debugger.lua

आप सेटअप करने के लिए एक दूरस्थ डिबग सर्वर की जरूरत नहीं है, बस एक फ़ाइल की आवश्यकता होती है, और simplely कॉल dbg() के लिए धन्यवाद और इसे रोकना होगा, जैसे gdb

एक ट्यूटोरियल भी इसके साथ भेज दिया गया है, इसे जांचें।