Bạn có thể cho tôi biết điều gì có thể gây ra lỗi SIGABRT trong C++?Điều gì gây ra lỗi SIGABRT?
Trả lời
Điều này thường xảy ra khi các thư viện gặp phải lỗi nội bộ, vì vậy chúng gọi là hủy bỏ(), vì chúng không thể tiếp tục. Điều này có thể xảy ra khi bạn ghi đè lên một trong các cấu trúc dữ liệu của nó (ví dụ, một cấu trúc thuộc về hàm từ libc). Vì vậy, điều này có thể là v.d. libc gọi bởi vì bạn đã ghi đè lên một cái gì đó. Và sau đó ứng dụng phải chấm dứt vì không thể tiếp tục hoặc xử lý nó, được gọi là xác nhận không thành công.
mỗi Wikipedia,
SIGABRT
được gửi bởi quá trình này với chính nó khi nó gọi làabort
chức năng libc, quy định tạistdlib.h
. Tín hiệuSIGABRT
có thể bị bắt, nhưng nó không thể bị chặn; nếu trình xử lý tín hiệu trả về thì tất cả các luồng đang mở đều được đóng và xả và chương trình chấm dứt (bán phá giá lõi nếu thích hợp). Điều này có nghĩa là cuộc gọiabort
không bao giờ trở lại. Do đặc điểm này, nó thường được sử dụng để báo hiệu các điều kiện chết người trong các thư viện hỗ trợ, các tình huống mà hoạt động hiện tại không thể hoàn thành được nhưng chương trình chính có thể thực hiện dọn dẹp trước khi thoát. Nó được sử dụng khi một xác nhận không thành công.
Điều đó có nghĩa rằng không nếu mã của bạn là gọi abort
trực tiếp hay gửi bản thân tín hiệu SIGABRT
qua raise
, và bạn không có bất kỳ khẳng định thất bại, nguyên nhân phải có một thư viện hỗ trợ (mà có thể là libc) đã gặp lỗi nội bộ. Nếu bạn cung cấp chi tiết về chương trình của mình, chúng tôi có thể đề xuất các nguyên nhân có thể xảy ra. Thậm chí tốt hơn, nếu bạn kiểm tra một lõi hoặc chạy chương trình của bạn trong một trình gỡ lỗi, bạn sẽ có thể thu thập một dấu vết ngăn xếp, sẽ hiển thị thư viện nào khiến chương trình của bạn bị hủy bỏ.
(Nó cũng có thể là một chương trình khác trên hệ thống của bạn đang gửi chương trình của bạn SIGABRT
, nhưng đây là trong nhiều trường hợp vanishingly khó xảy ra.)
Trên thực tế điều này thường được kích hoạt bởi các vĩ mô khẳng định:
char* foo = NULL;
assert(foo != NULL);
sẽ dẫn đến SIGABRT
- 1. Điều gì gây ra lỗi 2010?
- 2. SIGABRT trong malloc.c, điều gì vừa xảy ra?
- 3. Điều gì gây ra HttpHostConnectException?
- 4. Điều gì gây ra lỗi liên kết iOS?
- 5. điều gì có thể gây ra lỗi in trong perl?
- 6. Điều gì gây ra lỗi phân đoạn Python?
- 7. Điều gì gây ra lỗi Google Maps trong IE8?
- 8. Điều gì gây ra lỗi HTTP HTTP HttpListener?
- 9. Điều gì gây ra thông báo lỗi Scala này?
- 10. Điều gì gây ra EventMachine :: ConnectionNotBound?
- 11. Xcode 4.2 Lỗi SIGABRT
- 12. Điều gì có thể gây ra phương thức Html.ValidateFor() để tạo ra một lỗi biên dịch?
- 13. Điều gì có thể gây ra lỗi "danh sách liên kết kép bị lỗi"?
- 14. Điều gì gây ra lỗi "Lỗi loại không bắt buộc: số không phải là hàm"
- 15. Tại sao điều này gây ra lỗi cú pháp?
- 16. PHP ob_flush() gây ra lỗi
- 17. TortoiseSVN: Điều gì gây ra dấu kiểm màu xám?
- 18. Điều gì gây ra chuyển hướng 301 này?
- 19. Điều gì gây ra hành vi chuột này?
- 20. Điều gì gây ra cờ UnhandledExceptionEventArgs.IsTerminating là đúng hay sai?
- 21. Điều gì gây ra lỗi `string.split không phải là một hàm`?
- 22. Điều gì gây ra lỗi bộ nhớ cache L3 trong CPU?
- 23. Điều gì gây ra asp.net Không thể tạo/sao chép lỗi?
- 24. Điều gì gây ra lỗi Java "Không thể tìm thấy biểu tượng" này?
- 25. Điều gì gây ra lỗi này? "Vị trí CALayer chứa NaN: [240 nan]"
- 26. Điều gì gây ra lỗi 'Không thể hủy đăng ký UpdatePanel'?
- 27. Điều gì có thể gây ra lỗi 2902 khi cài đặt MSI?
- 28. Điều gì gây ra lỗi này trên phần 3 của hướng dẫn Django?
- 29. Điều gì gây ra lỗi keytool "Không thể giải mã mục nhập nội dung an toàn"?
- 30. Mã nhảy ra khỏi bình và chạy? Điều gì gây ra điều này?
Điểm tốt !! :) Tôi đã thử tìm kiếm nó nói rằng tín hiệu được gửi để hủy bỏ quá trình từ trình biên dịch sang hệ thống, nhưng trình biên dịch của tôi không nói phần nào gây ra điều này bất thường hành vi, Để n mũi tên xuống trên này, tôi hỏi cho lý do có thể.Mã của tôi là 500 dòng dài. – user1444426
@ user1444426 - Biên dịch nó trong chế độ gỡ lỗi (-g với g ++), sử dụng dbx và nó sẽ tìm ra vấn đề. –
@Ecatmur, trang Wikipedia không thực sự hữu ích. Tất cả những gì nó nói là 'abort' làm tăng tín hiệu đó, nhưng nó không vượt quá điều đó. Đôi khi tôi nhận được tín hiệu 'SIGABRT' trong các chương trình của mình, nhưng tôi đã * không bao giờ * gọi trực tiếp là 'hủy bỏ'. –