2013-01-31 41 views
6

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

अधिक आम तौर पर, मैं सोच रहा था कि उत्तराधिकार में एकाधिक एलएलडीबी कमांड के लिए उपनाम बनाने का कोई तरीका है: उदाहरण के लिए एक एकल उपनाम जो% आरडीआई की सामग्री मुद्रित कर सकता है, फिर आसपास के 10 लाइनों को अलग करें EIP। (हाँ, मैं इसके लिए पाइथन लिपि लिख सकता हूं, लेकिन मेरे पास मेरे हाथ पर इतना समय नहीं है :-(

उत्तर

1

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

लेकिन यहां अपने लक्ष्य को संबोधित करने के लिए, 01 क्यों नहीं होगासेटिंग आपको क्या चाहिए? असल में, यह पहले से ही ऐसा करना चाहिए जो आप चाहते हैं जब तक कि आपने की डिफ़ॉल्ट सेटिंग बदलकर ~/.lldbinit फ़ाइल में डिस्सेप्लर डिस्प्ले को अक्षम कर दिया हो।

(lldb) settings show stop-disassembly-count 
stop-disassembly-count (int) = 4 
(lldb) settings show stop-disassembly-display 
stop-disassembly-display (enum) = no-source 
(lldb) 

lldb का डिफ़ॉल्ट व्यवहार संदर्भ से कुछ तरह जब आप एक कार्यक्रम के माध्यम से आगे बढ़ रहे हैं दिखाने के लिए है। यदि स्रोत कोड उपलब्ध है, तो वह उस स्रोत को दिखाएगा जो आप आगे बढ़ रहे हैं। यदि कोई स्रोत नहीं है, तो यह असेंबली निर्देश दिखाएगा जो निष्पादित किए जा रहे हैं। जब आपके पास डीबग जानकारी होती है तो थोड़ी सी बग होती है (इसलिए डीबगर फ़ाइल और लाइन नंबर जानता है) लेकिन स्रोत कोड अनुपलब्ध है (या एक अलग पथ पर) - अभी एलएलडीबी आपको डिस्सेप्लोर दिखाएगा लेकिन यह सही व्यवहार नहीं है ये मामला। उपयोगकर्ता अभी भी स्रोत स्तर पर ऑपरेटिंग कर रहे हैं (s और n का उपयोग si और ni के बजाय निर्देश-स्तरीय स्टेपिंग के लिए) और lldb को इस उदाहरण में कोई संदर्भ नहीं दिखाना चाहिए, केवल स्रोत फ़ाइल नाम और रेखा संख्या प्रदर्शित करना चाहिए।

+0

ठीक है समस्या मशीन पर lldbinit फ़ाइल के साथ था डीबगिंग था। वास्तव में एलएलडीबी प्यार करता हूँ। सहायता के लिए धन्यवाद। – MachPortMassenger