2012-01-24 31 views
6

Tôi hiện đang viết kịch bản lệnh GDB Python. Vấn đề là nó phải tương thích với GDB 7.1. Vì vậy, lần đầu tiên tôi đã viết kịch bản cho GDB 7.3.1 và sử dụng các chức năng sau đây để nhận được đầu ra của một lệnh gdb (GDB 7.3.1):Cách lấy kết quả từ gdb.execute trong PythonGDB (GDB 7.1)?

myvar = gdb.execute("info target", False, True) 

Tham số cuối cùng của chức năng này là nó phải trả lại kết quả như là một chuỗi (mà làm một cách hoàn hảo cảm giác, tại sao khác tôi sẽ thực thi một lệnh như vậy;))

Trong GDB Version 7.1 mặc dù có vẻ như tham số cuối cùng isn't available do đó dòng này (GDB 7.1):

myvar = gdb.execute("info target", False) 

trả về None.

Có cơ hội nào để truy xuất đầu ra của lệnh này không? Tôi đã cố gắng chuyển hướng đầu ra chuẩn của tập lệnh python vào một tệp, sau đó tải tệp này nhưng dường như đầu vào và đầu ra chuẩn của tập lệnh python là overwritten by the gdb environment do đó đầu ra từ lệnh gdb.execute không được ghi vào tệp của tôi. Điều duy nhất tôi có thể nghĩ đến bây giờ là để bọc kịch bản của tôi lên với một kịch bản bash đầu tiên sẽ mở gdb với một kịch bản python thực hiện các lệnh khác nhau và sau đó ống đó vào một tập tin. Sau đó mở gdb một lần nữa nhưng với một kịch bản python khác tải tệp, phân tích nó và sau đó thực thi các lệnh khác dựa trên đầu vào từ tệp và vân vân. Nhưng đây thực sự là một giải pháp tồi tệ nhất mà tôi có thể nghĩ đến.

Vậy có cách nào để nhận đầu ra của gdb.execute trong GDB 7.1 không?

Trả lời

5

Vì vậy, có cách nào để nhận đầu ra của gdb.execute trong GDB 7.1 không?

số

Tốt nhất là để sắp xếp cho GDB 7.3 có sẵn. Vì GDB thường không sử dụng các thư viện được chia sẻ (ngoài libc và có lẽ libpython), bạn có thể chỉ sao chép gdb nhị phân bằng tập lệnh của mình. Điều đó sẽ dễ dàng hơn và dễ bảo trì hơn so với giải pháp thay thế mà bạn đề xuất.

2

Bạn có thể viết vào một tập tin, sau đó đọc các tập tin, ví dụ:

os.system("rm tmp.txt") 
gdb.execute("set logging file tmp.txt") 
gdb.execute("set logging on") 
mainsec=gdb.execute("info proc mappings") 
gdb.execute("set logging off") 
mainsec = open("tmp.txt").read() 

Các phiên bản cũ của gdb.execute là cao hơn nhiều so mặc dù.

Các vấn đề liên quan