Trong Ubuntu tôi đã phải đối mặt với lỗi phân đoạn nhiều lần. Một lỗi phân khúc là gì và khi nào nó xảy ra?
Trong Ubuntu tôi đã phải đối mặt với lỗi phân đoạn nhiều lần. Một lỗi phân khúc là gì và khi nào nó xảy ra?
Câu trả lời:
Lỗi nói lỗi phân đoạn (hoặc segfault hoặc SIGSEGV ) trong Ubuntu và các hệ điều hành khác giống Unix hoặc nói lỗi bảo vệ chung trong Windows là khi chương trình cố gắng truy cập vào một phần bộ nhớ không thể truy cập hoặc chương trình bị cấm truy cập. Lỗi phân đoạn là một loại sự cố chương trình, nghĩa là chấm dứt bất thường của chương trình. Xem các bài viết Wikipedia về tai nạn , bảo vệ bộ nhớ , lỗi phân khúc , lỗi bảo vệ tổng quát , và SIGSEGV để biết thêm thông tin (và một sự hiểu biết kết cấu hơn về chủ đề hơn được trình bày ở đây).
Một lỗi phân đoạn hầu như luôn luôn là do lỗi trong chương trình xảy ra. Tôi đoán hầu hết hoặc tất cả các lỗi phân khúc của bạn đang xảy ra từ cùng một ứng dụng. Vui lòng cung cấp thêm chi tiết về các trường hợp xảy ra lỗi phân đoạn trên máy của bạn và chương trình nào bị lỗi. Ngoài ra, vui lòng cung cấp văn bản đầy đủ và chính xác của thông báo lỗi bạn đang nhận và bất kỳ thông báo nào khác xuất hiện trước nó. Điều này sẽ giúp chúng tôi có thể cung cấp lời khuyên chi tiết cụ thể cho vấn đề của bạn (thay vì chỉ là thông tin chung về lỗi phân khúc là gì).
Cách tốt nhất để bạn cung cấp thông tin này là bạn chỉnh sửa câu hỏi của mình để đưa nó vào . Ngoài ra, nếu bạn muốn câu hỏi này chỉ nói về lỗi phân khúc nói chung, bạn có thể đăng câu hỏi mới để hỏi về nguyên nhân cụ thể gây ra lỗi phân khúc của bạn (nếu bạn làm điều này, hãy đảm bảo cung cấp tất cả các chi tiết này trong câu hỏi mới của bạn) .
Lỗi phân đoạn là do lỗi trong ứng dụng. Về mặt kỹ thuật, điều đó có nghĩa là ứng dụng cố gắng đọc hoặc ghi vào một phần bộ nhớ không thuộc về nó (hoặc không tồn tại). Tất nhiên, không được phép đọc hoặc ghi vào bộ nhớ của người khác và khi hệ thống (kernel) phát hiện ra điều này, nó sẽ buộc ứng dụng thoát.
Đã qua rồi cái thời mà mọi người thường theo dõi thông qua mã lắp ráp và gỡ lỗi một vấn đề. Abends, Dr Watson, Phân đoạn lỗi. Những ngày xanh đã qua.
Một trong những lý do cho lỗi phân đoạn là khi mã có quyền truy cập trực tiếp vào bộ nhớ bị lỗi. Khi một đoạn mã cố gắng truy cập vào đoạn bộ nhớ của một ứng dụng khác, sẽ xảy ra lỗi phân đoạn. Phân bổ bộ nhớ là một số lần di chuyển xung quanh để cho phép các khối bộ nhớ liền kề lớn hơn được phân bổ. Trong khi nó cố gắng khôi phục, kernel cố gắng lưu tất cả thông tin bộ nhớ của nó vào một tệp, trạng thái hiện tại của tất cả các ứng dụng đang chạy trên cpu và trạng thái của chúng (lệnh chạy lần cuối) vào một tệp và chỉ chết. Nó cũng sẽ cố gắng lưu trữ càng nhiều thông tin phục hồi và đóng càng nhiều tệp càng tốt, để hdd không bị hỏng liên kết.
Gỡ lỗi và sửa nó nếu bạn có thể sao chép nó thường xuyên. Nếu bạn không thể tái tạo nó, chỉ cần chắp tay, quỳ xuống và cầu nguyện như địa ngục mà bạn không thấy nó "thường xuyên".
SIGSEGV
trình xử lý thành bất kỳ thứ gì khác ngoài SIG_DFL
(đó là đổ lõi và thoát cho a SIGSEGV
) vì nếu bạn đang truy cập vào bộ nhớ thì bạn không nên truy cập bộ nhớ. sai và phục hồi có lẽ là không thể. (2) Lõi sẽ chỉ bị đổ khi quá trình đã bị dừng. (3) Kết xuất lõi chỉ bao gồm bộ nhớ và các thanh ghi của quá trình được kết xuất. (4) Các quy trình khác, CPU và nhân không bị ảnh hưởng bởi một segfault của quy trình khác.