Giữa Xcode, lldb và trình thông dịch Python có một số vấn đề với bảng điều khiển tương tác. Vui lòng gửi báo cáo lỗi tại số http://bugreport.apple.com/ - Tôi không biết liệu có báo cáo lỗi về vấn đề cụ thể này chưa, mặc dù các vấn đề nói chung ở đây được biết đến. Bạn có thể muốn sử dụng công cụ dòng lệnh lldb nếu bạn đang khám phá giao diện kịch bản lệnh python tương tác; hoạt động tốt hơn.
Tôi đặt tất cả các tập lệnh python của tôi cho lldb trong ~/lldb
. Trong tập tin ~/.lldbinit
tôi nguồn họ. Ví dụ, tôi có ~/lldb/stopifcaller.py
đó là
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()
Tôi sẽ đưa command script import
trong tập tin ~/.lldbinit
tôi để tải nó tự động, nếu đó là những gì tôi muốn. Ví dụ cụ thể này thêm lệnh python vào điểm ngắt # 1 - khi lldb dừng tại điểm ngắt, nó sẽ xem xét hàm gọi. Nếu chức năng gọi không phải là foo
, chức năng này sẽ tự động tiếp tục thực hiện. Về bản chất, breakpoint 1 sẽ chỉ dừng lại nếu foo() gọi bar(). Lưu ý rằng có thể có vấn đề với Xcode 4.5 lldb khi thực hiện command script import ~/...
- bạn có thể cần nhập đường dẫn đầy đủ vào thư mục chính của mình (/Users/benwad/
hoặc bất kỳ thứ gì). Tôi không thể nhớ chắc chắn - có một vài vấn đề mở rộng dấu ngã với Xcode 4.5 đã được sửa trong một thời gian.
Bạn có thể thêm tóm tắt loại đơn giản trực tiếp vào số ~/.lldbinit
của mình. Ví dụ, nếu tôi đang gỡ lỗi lldb, thì đối tượng ConstString
chỉ có một trường mà tôi quan tâm, m_string ivar.Vì vậy, tôi có
type summary add -w lldb lldb_private::ConstString -s "${var.m_string}"
Hoặc nếu đó là loại addr_t
, tôi luôn luôn muốn điều đó được định dạng như hex vì vậy tôi có
type format add -f x lldb::addr_t
Nếu bạn muốn thêm một lệnh mới để LLĐB, bạn sẽ có một con trăn nộp như ~/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')
và bạn sẽ tải nó vào LLĐB như
(lldb) comma script import ~/lldb/sayhello.py
(lldb) hello
hello
(lldb)
Hầu hết thời gian khi bạn thêm lệnh được viết bằng python, bạn sẽ sử dụng các thư viện shlex
và optparse
để lệnh có thể thực hiện phân tích tùy chọn và bạn sẽ thêm một chuỗi __doc__
. ví dụ đơn giản.
Cảm ơn! Thông tin rất hữu ích để tôi bắt đầu. – benwad
Bạn không xảy ra để có một repo github với 'lldb'' python' đoạn của bạn làm bạn? (Tôi nhìn và không nhìn thấy một ... ưa thích bắt đầu một?) Tôi nghĩ rằng nó rất thú vị. – trojanfoe
Tôi nghĩ chúng ta thực sự cần thêm tài liệu theo kiểu sách dạy nấu ăn vào trang web lldb với một tập hợp các vấn đề đơn giản và giải pháp của họ - đó có lẽ là nơi tốt nhất cho loại điều này. Thiếu thời gian. :( –