2013-01-09 11 views
5

में एलएलडीबी पायथन स्क्रीप्टिंग मैंने हाल ही में एलएलडीबी की this आसान फीचर की खोज की है जो मुझे पाइथन स्क्रिप्ट लिखने की अनुमति देती है, जिसमें एलएलडीबी में ब्रेकपॉइंट पर फ्रेम में वेरिएबल्स तक पहुंच होती है। हालांकि Xcode (v4.5.2) में इसका उपयोग करते समय मुझे कुछ समस्याएं आ रही हैं। सबसे पहले, मुझे कहीं भी नहीं मिल सकता है जो कहता है कि मुझे इन पायथन स्क्रिप्ट को कहाँ रखना चाहिए ताकि मैं उन्हें एलएलडीबी में कमांड लाइन से आयात कर सकूं। दूसरा, जब मैं script को एलएलडीबी में टाइप करता हूं तो कीबोर्ड इनपुट थोड़ा गलत हो जाता है: बैकस्पेस स्क्रीन पर वर्ण को हटा नहीं देता है, लेकिन इसे कमांड से प्रभावी ढंग से हटा देता है। तो टाइपिंग primt<bsp><bsp><bsp>int प्रभावी ढंग से print का अर्थ है, लेकिन यह अभी भी टर्मिनल पर primtint के रूप में आता है। यह सिर्फ सौंदर्य है लेकिन यह काफी परेशान है!एक्सडीडी

क्या कोई मुझे एलएलडीबी के साथ पायथन का उपयोग करने के लिए कुछ एक्सकोड-विशिष्ट संसाधनों में इंगित कर सकता है?

संपादित करें: Here एक और दिलचस्प लिंक है जो कहता है कि आप पाइथन का उपयोग करके चर के लिए कस्टम सारांश बनाने के लिए पाइथन का उपयोग कर सकते हैं, लेकिन मुझे उससे संबंधित कुछ भी नहीं मिल रहा है।

उत्तर

13

एक्सकोड, एलएलडीबी और पायथन दुभाषिया के बीच, दुर्भाग्य से इंटरैक्टिव कंसोल के साथ कुछ समस्याएं हैं। कृपया http://bugreport.apple.com/ पर एक बग रिपोर्ट दर्ज करें - मुझे नहीं पता कि इस विशिष्ट मुद्दे के बारे में कोई बग रिपोर्ट है या नहीं, हालांकि यहां सामान्य रूप से समस्याएं ज्ञात हैं। यदि आप इंटरैक्टिव पायथन स्क्रिप्टिंग इंटरफ़ेस की खोज कर रहे हैं तो आप कमांड लाइन lldb टूल का उपयोग करना चाह सकते हैं; यह बेहतर काम करता है।

मैंने ~/lldb में एलएलडीबी के लिए अपनी सभी पायथन स्क्रिप्ट डालीं। मेरी ~/.lldbinit फ़ाइल में मैं उन में स्रोत। उदाहरण के लिए, मैं ~/lldb/stopifcaller.py है जो

import lldb 

# Use this like 
# (lldb) command script import ~/lldb/stopifcaller.py 
# (lldb) br s -n bar 
# (lldb) br comm add --script-type python -o "stopifcaller.stop_if_caller(frame, 'foo')" 1 

def stop_if_caller(current_frame, function_of_interest): 
    thread = current_frame.GetThread() 
    if thread.GetNumFrames() > 1: 
    if thread.GetFrameAtIndex(1).GetFunctionName() != function_of_interest: 
     thread.GetProcess().Continue() 

है मैं अपने ~/.lldbinit फ़ाइल में command script import डाल यह स्वचालित रूप से लोड करने के लिए, अगर मैं चाहता था कि। यह विशेष उदाहरण # 1 को तोड़ने के लिए एक पायथन कमांड जोड़ता है - जब lldb ब्रेकपॉइंट पर रुक जाता है, तो यह कॉलिंग फ़ंक्शन को देखेगा। यदि कॉलिंग फ़ंक्शन foo नहीं है, तो यह स्वचालित रूप से निष्पादन फिर से शुरू हो जाएगा। संक्षेप में, ब्रेकपॉइंट 1 केवल तभी रुक जाएगा जब foo() बार बार() कॉल करता है। ध्यान दें कि command script import ~/... करने में Xcode 4.5 lldb के साथ कोई समस्या हो सकती है - आपको अपनी होम निर्देशिका (/Users/benwad/ या जो कुछ भी) का पूरा पथ टाइप करना पड़ सकता है। मुझे निश्चित रूप से याद नहीं है - एक्सकोड 4.5 के साथ कुछ टिल्डे-विस्तार समस्याएं थीं जिन्हें कुछ समय के लिए तय किया गया है।

आप अपने ~/.lldbinit पर सीधे सरल प्रकार के सारांश जोड़ सकते हैं। उदाहरण के लिए, यदि मैं खुद को lldb डीबग कर रहा हूं, ConstString ऑब्जेक्ट्स में सामान्य रूप से मेरे लिए रुचि का केवल एक फ़ील्ड है, m_string ivar।इसलिए मैं

type summary add -w lldb lldb_private::ConstString -s "${var.m_string}" 

है या अगर यह प्रकार addr_t है, मैं हमेशा चाहते हैं कि स्वरूपित हेक्स के रूप में तो मैं

type format add -f x lldb::addr_t 

है आप lldb के लिए एक नया आदेश जोड़ना चाहते हैं, तो आप एक अजगर के लिए होता है ~/lldb/sayhello.py तरह फाइल,

import lldb 

def say_hello(debugger, command, result, dict): 
    print 'hello' 

def __lldb_init_module (debugger, dict): 
    debugger.HandleCommand('command script add -f sayhello.say_hello hello') 

और आप इसे में लोड

की तरह lldb करने के लिए

समय है जब आप एक आदेश अजगर में लिखा आप ऐसा आदेश विकल्प पार्स कर सकते हैं shlex और optparse पुस्तकालयों का उपयोग कर देंगे, और एक __doc__ स्ट्रिंग जोड़ देंगे जोड़ रहे हैं के अधिकांश - मैं उन चीजों को रखने के लिए छोड़े गए उदाहरण सरल है।

+0

धन्यवाद! मुझे शुरू करने के लिए बहुत उपयोगी जानकारी। – benwad

+0

क्या आपके पास आपके 'lldb'' पायथन 'स्निपेट्स के साथ एक जिथब रेपो नहीं है? (मैंने देखा और एक नहीं देखा ... फैंसी एक शुरू?) मुझे लगता है कि यह बहुत दिलचस्प है। – trojanfoe

+5

मुझे लगता है कि हमें वास्तव में एक समस्या-शैली शैली दस्तावेज़ को एलएलडीबी वेबसाइट पर सरल समस्याओं और उनके समाधानों के संग्रह के साथ जोड़ने की ज़रूरत है - जो शायद इस तरह की चीज़ के लिए सबसे अच्छी जगह होगी। हालांकि समय की कमी :( –