Tôi có một ứng dụng đa nền tảng rất phức tạp. Gần đây nhóm của tôi và tôi đã chạy thử nghiệm căng thẳng và đã gặp phải một số sự cố (và các bãi lõi đi kèm với chúng). Một số các bãi lõi là rất chính xác, và cho tôi thấy vị trí chính xác nơi vụ tai nạn xảy ra với khoảng 10 hoặc nhiều khung ngăn xếp. Những người khác đôi khi chỉ có một khung ngăn xếp với ?? là biểu tượng duy nhất!Làm thế nào để tăng xác suất của các khối lõi Linux khớp với các biểu tượng?
Những gì tôi muốn biết là:
- Có cách nào để tăng khả năng cốt lõi bãi chỉ đi đúng hướng?
- Tại sao số lượng khung xếp chồng không được báo cáo nhất quán?
- Bất kỳ phương pháp hay nhất nào để được tư vấn về quản lý các bãi lõi.
Đây là cách tôi biên dịch mã nhị phân (trong chế độ phát hành):
- Compiler và nền tảng: g ++ với glibc-2.3.2-95.50 trên CentOS 3.6 x86_64 - Điều này giúp tôi duy trì khả năng tương thích với cũ phiên bản Linux.
- Tất cả các tệp được biên dịch bằng cờ -g.
- Biểu tượng gỡ lỗi bị tước khỏi nhị phân cuối cùng và được lưu trong một tệp riêng biệt.
- Khi tôi có kết xuất lõi, tôi sử dụng GDB với tệp thực thi đã tạo lõi và tệp biểu tượng. GDB không bao giờ than phiền rằng có sự không khớp giữa lõi/nhị phân/ký hiệu.
Tuy nhiên, đôi khi tôi nhận được các bãi lõi không có biểu tượng nào cả! Có thể hiểu được rằng tôi đang liên kết với phiên bản libstdC++ và libgcc không được gỡ lỗi, nhưng sẽ tốt hơn nếu ít nhất là dấu vết ngăn xếp cho tôi biết mã lệnh của tôi đã xuất hiện ở đâu trong khi mã lệnh của tôi bị lỗi (mặc dù cuối cùng có thể kết thúc bằng ??) .
Điều này rất có thể là vấn đề - nếu khung ngăn xếp đã bị lỗi phá vỡ, thì nó biến mất. – caf
Được thăng hạng. Nếu lỗi đó đang trashing ngăn xếp, thì không có sự thay thế nào cho việc thất bại sớm và lớn tiếng. khẳng định() là bạn của bạn. – user47559