2009-12-18 47 views
12

Có thể, trong mọi trường hợp, để khôi phục trạng thái của chương trình về nội dung trong quá trình tạo tệp lõi?Khôi phục trạng thái chương trình từ tệp lõi

Lý do tôi yêu cầu là để tận dụng khả năng của hàm gdb để thực hiện các hàm và do đó bạn cần có một cá thể đang chạy. Chắc chắn nó sẽ có thể tạo ra một quá trình giả lập cùng một tập tin thực thi với trạng thái được thiết lập là nội dung của lõi?

Nếu không có lựa chọn thay thế nào cho loại tình huống khiến tôi muốn thực hiện điều này ngay từ đầu? Trong trường hợp này, dấu vết của lõi dẫn đến chức năng thư viện và tôi muốn sao chép các đầu vào cho hàm gọi này nhưng một trong các đầu vào là đối tượng phức tạp, có thể dễ dàng được tuần tự hóa thành chuỗi bằng lệnh gọi hàm trong khi chạy ví dụ nhưng không phải như vậy trong một bãi chứa lõi.

Trả lời

7

Về mặt lý thuyết có thể thực hiện chính xác những gì bạn muốn, nhưng (AFAICT) không có hỗ trợ cho điều này trong GDB (chưa).

Đặt cược tốt nhất của bạn là sử dụng GDB-7.0 và sử dụng tập lệnh python được nhúng của nó để triển khai lại chức năng tuần tự hóa.

+0

Cảm ơn - không biết nếu kịch bản python có thể làm những gì tôi muốn nhưng nó có vẻ rất hữu ích như nhau. – cyborg

2

Đó là những gì một tệp lõi đã có? Nếu bạn tải gdb với tệp thực thi gốc và tệp lõi

gdb myprogram.exe -c mycorefile 

Sau đó, nó sẽ đến điểm bị lỗi. Bạn có thể sử dụng tất cả các chức năng kiểm tra bình thường để xem các biến, xem dấu vết ngăn xếp và vân vân.

Hoặc tôi đã hiểu nhầm câu hỏi của bạn?

+3

Bạn không thể thực hiện các hàm trong gdb khi bạn đang gỡ lỗi một tệp lõi. Vì vậy, nói rằng tôi có một tập tin lõi, xác định vị trí một biến của một lớp phức tạp Foo và tôi muốn thực hiện Foo.getSerialization() để có được một đại diện chuỗi đơn giản đẹp tôi không thể vì nó không phải là một quá trình đang chạy. Vì vậy, câu hỏi là có thể đi từ cốt lõi đến một quá trình đang chạy. – cyborg

+1

Bạn có thể viết một số mã để tạo các giá trị in gdb đẹp. Xem API Python tại đây (http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html#Python-API). –

+0

@ JeffFoster Tôi nghĩ rằng nó thực sự không giúp ích gì, nếu bạn muốn gọi bất kỳ chức năng trực tiếp nào thì điều đó là không thể. –

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