Tôi có một ứng dụng C mà chúng tôi đã triển khai cho trang web của khách hàng. Nó được biên dịch và chạy trên HP-UX. Người dùng đã báo cáo sự cố và chúng tôi đã có được kết xuất chính. Cho đến nay, tôi đã không thể lặp lại vụ tai nạn trong nhà.Tệp lõi gỡ lỗi không có ký hiệu
Như bạn nghi ngờ, tệp lõi/triển khai được triển khai hoàn toàn không có bất kỳ loại biểu tượng nào. Khi tôi tải nó lên trong gdb và làm một bt, tốt nhất tôi nhận được là:
(gdb) bt
#0 0xc0199470 in ??()
tôi có thể làm một 'dây lõi' trên tập tin, nhưng sự hiểu biết của tôi là tất cả những gì đạt được điều đó là tất cả các các chuỗi trong tệp thực thi, vì vậy dường như không thể theo dõi bất kỳ thứ gì ở đó.
Tôi có một phiên bản gỡ lỗi (được biên dịch với -g) của tệp thực thi, rất tiếc là một vài tháng mới hơn phiên bản đã phát hành. Nếu tôi cố gắng để bắt đầu gdb với trung tâm đó, tôi thấy điều này:
warning: exec file is newer than core file.
Core was generated by `program_name'.
Program terminated with signal 11, Segmentation fault.
__dld_list is not valid according to __dld_flags.
#0 0xc0199470 in ??()
(gdb) bt
#0 0xc0199470 in ??()
Trong khi nó sẽ là khả thi để biên dịch một phiên bản sửa lỗi và triển khai nó tại địa điểm của khách hàng và sau đó chờ cho vụ tai nạn khác, nó sẽ là tương đối khó khăn và không mong muốn vì một số lý do.
Tôi khá quen thuộc với mã và có ý tưởng tương đối tốt về vị trí mã đang bị lỗi dựa trên báo cáo lỗi của khách hàng.
Có cách nào để tôi có thể thu thập thêm bất kỳ thông tin nào từ kết xuất cốt lõi này không? Qua chuỗi hoặc trình gỡ lỗi khác hoặc bất kỳ thứ gì? Cảm ơn.
Câu trả lời này có vẻ khó hiểu với tôi. Tôi chắc chắn sẽ xem xét mã cho các khu vực có khả năng bị tràn ngập. – Morinar
Nếu gỡ lỗi với một bản sao "trùng lặp" không hiển thị bất cứ điều gì, đó là thời gian để bắt đầu nhìn vào đăng ký và ngăn xếp bãi để cố gắng suy ra cách bạn đã đi vào giữa hư không. Nó cũng có thể là con trỏ hàm (hoặc uninitialized) bị thổi, quá tải phân bổ, hoặc có thể là kích cỡ bộ đệm không chính xác hoặc đầu vào "xấu" thổi bộ đệm (sử dụng sprintf()/sscanf với đầu vào không kiểm soát, v.v.). – jesup
Tôi chưa bao giờ tìm ra bất cứ điều gì ở đây, nhưng tôi chấp nhận điều này vì nó vẫn có vẻ giống như khả năng xảy ra nhất. – Morinar