एक्सकोड, एलएलडीबी और पायथन दुभाषिया के बीच, दुर्भाग्य से इंटरैक्टिव कंसोल के साथ कुछ समस्याएं हैं। कृपया 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__
स्ट्रिंग जोड़ देंगे जोड़ रहे हैं के अधिकांश - मैं उन चीजों को रखने के लिए छोड़े गए उदाहरण सरल है।
धन्यवाद! मुझे शुरू करने के लिए बहुत उपयोगी जानकारी। – benwad
क्या आपके पास आपके 'lldb'' पायथन 'स्निपेट्स के साथ एक जिथब रेपो नहीं है? (मैंने देखा और एक नहीं देखा ... फैंसी एक शुरू?) मुझे लगता है कि यह बहुत दिलचस्प है। – trojanfoe
मुझे लगता है कि हमें वास्तव में एक समस्या-शैली शैली दस्तावेज़ को एलएलडीबी वेबसाइट पर सरल समस्याओं और उनके समाधानों के संग्रह के साथ जोड़ने की ज़रूरत है - जो शायद इस तरह की चीज़ के लिए सबसे अच्छी जगह होगी। हालांकि समय की कमी :( –