Làm cách nào để xem tệp CoreDump?


13

Khi báo cáo lỗi từ sự cố, lỗi được đặt ở chế độ riêng tư và tệp có tên CoreDump.gz. Tài liệu Bug Triage cho biết như sau:

Nếu sự cố vẫn có tệp đính kèm CoreDump.gz, thì không thể tự động lấy dấu vết ngăn xếp biểu tượng đầy đủ và kiểm tra các bản sao.

Stacktrace.txt dường như có thể đọc được bởi một con người. Làm thế nào tôi có thể hiểu ý nghĩa của một dấu vết ngăn xếp. CoreDump không có CoreDump.gz dường như không thể đọc được. Một "dấu vết ngăn xếp đầy đủ biểu tượng" là gì? Sự khác biệt giữa "dấu vết ngăn xếp biểu tượng đầy đủ" Làm cách nào để tôi xem nội dung của tệp CoreDump? (đã thử 'mèo', nhưng nó không sạch)

Câu trả lời:


15

Coredump.gz là bộ nhớ (đã nén) có thể truy cập được bởi chương trình bị hỏng. Nó là một tập tin nhị phân. Lõi là một kho báu, với tất cả các loại dữ liệu riêng tư được khai thác.

Lõi có thể được xem bằng cách chạy 'gdb':

gdb --core=mycoredump

Tất nhiên, bạn vẫn sẽ cần các gói gỡ lỗi liên quan đến lõi này.

Sau đó, bạn có thể tạo một stacktrace bằng cách:

(gdb) bt

để tạo một ngăn xếp của luồng hiện tại - không có độ phân giải tham số - hoặc

(gdb) thread apply all bt full

để tạo một stacktrace của tất cả các luồng trong coredump, với độ phân giải tham số.

stacktrace và stacktraces đầy đủ hiển thị luồng điều khiển trong một chương trình. Đối với Python, phần trên cùng của stacktrace hiển thị cuộc gọi cũ nhất, gần đây nhất ở phía dưới; đối với hầu hết mọi thứ khác, trên cùng là cuộc gọi gần đây nhất và dưới cùng là cuộc gọi cũ nhất.

Một stacktrace đầy đủ sẽ không chỉ hiển thị luồng, mà cả các giá trị của tham số. Đây là nơi chúng ta thường tìm thấy dữ liệu riêng tư - ví dụ: giả sử bạn thấy một hàm có tên là "validatePassword" với một tham số gọi là "Mật khẩu" và giá trị của "MySecretPassword" ...

Stacktraces thường chỉ hữu ích nếu các gói gỡ lỗi được cài đặt (để các khung stack có thể được giải quyết thành một cái gì đó chúng ta có thể dễ dàng đọc được). Phân tích một stacktrace sẽ yêu cầu một nguồn có các nguồn được sử dụng để xây dựng thể hiện chương trình cụ thể này.


CoreDump là một tệp nhị phân, nhưng làm thế nào để bạn xem nó? Stacktraces chỉ hữu ích nếu các gói gỡ lỗi được cài đặt, vậy tại sao apport lại báo cáo nó?
tính

1
Tệp CoreDump không có nghĩa là được xem, nó có nghĩa là được sử dụng để gỡ lỗi trong gdb. Bạn cần có một máy chạy cùng một phiên bản phần mềm (và tất cả các phụ thuộc) tạo ra sự cố và có các gói gỡ lỗi, sau đó bạn có thể sử dụng những gì Carlos đã đăng ở trên để có được dấu vết ngăn xếp.
stgraber

2
Bây giờ là lý do tại sao nó vẫn phù hợp với apport, bởi vì apport có một loạt các "retracers" lấy coredump của bạn, cài đặt các gói gỡ lỗi trên một hộp trong DC và sau đó đính kèm stacktract vào báo cáo lỗi.
stgraber


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.