2012-01-17 19 views
9

khi tải một kết xuất lõi vào GDB lý do tại sao nó bị lỗi tự động được hiển thị. Ví dụ:Làm thế nào để in tín hiệu nhận được cuối cùng trong GDB?

Chương trình bị chấm dứt bằng tín hiệu 11, Lỗi phân đoạn.

Có cách nào để lấy lại thông tin không? Vấn đề là, tôi đang viết một kịch bản cần thông tin này. Nhưng nếu tín hiệu chỉ có sẵn sau khi tải lõi dump amd tôi không thể truy cập thông tin sau này.

Có thực sự không có lệnh nào cho một tính năng quan trọng như vậy không?

Trả lời

3

Nếu bạn biết những gì tên tập tin cốt lõi là, bạn có thể dùng lệnh target core mà respecifies file lõi mục tiêu:

(gdb) target core core.8577 
[New LWP 8577] 
Core was generated by `./fault'. 
Program terminated with signal 11, Segmentation fault. 
#0 0x080483d5 in main() at fault.c:10 
10  *ptr = '\123'; 
(gdb) 

Đối với các câu hỏi ngụ ý, lệnh info last signal là gì?, tôi không biết. Có vẻ như không phải là một.


Tên tập tin cốt lõi có thể được lấy từ các lệnh info target:

(gdb) info target 
Symbols from "/home/wally/.bin/fault". 
Local core dump file: 
    `/home/wally/.bin/core.8577', file type elf32-i386. 
    0x00da1000 - 0x00da2000 is load1 
    0x08048000 - 0x08049000 is load2 
... 
    0xbfe8d000 - 0xbfeaf000 is load14 
Local exec file: 
    `/home/wally/.bin/fault', file type elf32-i386. 
    Entry point: 0x8048300 
    0x08048134 - 0x08048147 is .interp 
    0x08048148 - 0x08048168 is .note.ABI-tag 
    0x08048168 - 0x0804818c is .note.gnu.build-id 
    0x0804818c - 0x080481ac is .gnu.hash 
    0x080481ac - 0x080481fc is .dynsym 
    0x080481fc - 0x08048246 is .dynstr 
... 
+0

Cảm ơn, như vậy là có một khả năng để đọc các đối số được cung cấp cho chính gdb hoặc truyền qua các đối số cho tập lệnh của tôi như "gdb lõi thực thi --batch -x myscript.py [chèn đối số tại đây]" Bởi vì tôi cũng phát hiện ra khả năng này nhưng tôi cần phải xác định tên của tệp lõi mà thường được đưa ra thông qua các đối số cho gdb – Uhlo

+1

@Uhlo: Lệnh 'info target' hiển thị tên tệp thực thi và tệp lõi, cùng với thêm một chút thông tin. Có lẽ điều đó sẽ làm gì? – wallyk

+0

Cảm ơn bạn rất nhiều !! Phân tích cú pháp này khá khó nhưng ít nhất đó là cách làm việc :) Cảm ơn bạn lần nữa! – Uhlo

8

Để in các thông tin về tín hiệu cuối cùng thực hiện

p $_siginfo 
+1

Cảm ơn bạn đã thay thế! Có vẻ như tôi chỉ có thể thực hiện lệnh này sau hoặc trong khi chương trình được thực thi. Mỗi khi tôi thử nó với một khối lõi nó mang lại cho tôi lỗi "Không thể đọc siginfo' – Uhlo

+0

được mong đợi. Đó là trạng thái trong bộ nhớ của gdb và không được lưu vào đĩa. – steve

+0

Tôi có thể in $ _siginfo từ tệp kết xuất lõi mà không có chương trình thực thi. – firo

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