Cách khắc phục lỗi Phân đoạn (lõi bị đổ)


15

Tôi đang sử dụng Ubuntu 14.04.

Sau khi cài đặt một số ứng dụng, tôi gặp phải lỗi phân đoạn (lỗi kết xuất lõi).

Nó có nghĩa là gì ? Làm thế nào tôi có thể giải quyết vấn đề này?

Ví dụ :

Sau khi cài đặt chrome-ổn định, khi tôi khởi chạy nó từ thiết bị đầu cuối, tôi gặp lỗi này.


Một số chương trình nhị phân bị hỏng, nhưng điều này rất cụ thể đối với chương trình bị lỗi, vì vậy bạn có thể cần cho chúng tôi biết chương trình nào đã tạo ra chương trình này, bạn cũng có thể thử cập nhật nó.
Kwaadpepper


1
Vì nó là một nguồn đóng, tốt hơn hết bạn nên báo cáo lỗi cho chú GooGle!
user.dz

1
Tốt SH :) Tôi sẽ hỏi chú; P
Ravan

1
Hãy thử loại bỏ tùy chọn & bộ đệm , sudo rm -rf ~/.config/google-chrome ~/.cache/google-chrome. Sau đó chạy nó là chế độ ẩn danhgoogle-chrome --incognito
user.dz

Câu trả lời:


12

Nó có nghĩa là gì?

Xem AU: Lỗi phân khúc là gì? và cũng có một số ví dụ về cách tái tạo nó, SO: Lỗi phân khúc là gì? . mô tả đơn giản nhất tôi có thể đi kèm (có thể không hoàn hảo):

Chương trình đã cố gắng truy cập một vùng bộ nhớ bên ngoài phần riêng của nó. Hệ điều hành chặn nó.

Một số trường hợp: Đọc giá trị với con trỏ khởi tạo, Đi ra khỏi phạm vi trong một mảng, Gọi hàm (khi khả năng tương thích ngược không được duy trì), ...

Tuy nhiên, không phải lúc nào cũng dễ dàng tìm ra nguyên nhân với các chương trình lớn hoặc các chương trình chuyển tiếp trên lib của dự án khác. Và hầu hết các trường hợp kết thúc với một báo cáo lỗi, cho chương trình đích hoặc một nếu phụ thuộc của nó (dự án ngược dòng hoặc gói phân phối xuôi dòng).

Làm thế nào tôi có thể giải quyết vấn đề này?

Nếu bạn không thực hiện bất kỳ cấu hình / thiết lập tùy chỉnh nào và bạn đã cài đặt tất cả các bản cập nhật. Báo cáo lỗi , xem Làm cách nào để báo cáo lỗi?

Nếu nguồn mở được Ubuntu hỗ trợ, hãy sử dụng ubuntu-bug( apport-bug). Đối với nguồn đóng của bên thứ 3, hãy kiểm tra các trang trợ giúp của họ về cách báo cáo lỗi và thu thập dữ liệu liên quan.


Lưu ý: Nếu bạn thậm chí có một chút nền tảng lập trình, bạn nên cố gắng hết sức để tự giải quyết. Có nhiều báo cáo lỗi không hoạt động trong nhiều năm. Hoặc ít nhất là thu thập đủ dữ liệu gỡ lỗi để giải quyết vấn đề trước khi báo cáo.

Một số công cụ hữu ích để gỡ lỗi

  1. apport-bug bản ghi / bãi chứa lõi / backtrace

    Nếu bạn không có thông báo lỗi trước lỗi phân đoạn. Chạy nó với --savetùy chọn và tìm nhật ký theo dõi ngược:

    apport-bug program-cmd --save bug-report_output.txt
    
  2. gdb mã nguồn backtrace / gỡ lỗi

    Nếu nó không hoạt động, sử dụng gdb:

    $ gdb program-cmd
    (gdb) run
    (gdb) backtrace
    

    Nếu bạn nhận được bất kỳ thông báo lỗi nào, hãy kiểm tra web, launchpad và trong trình theo dõi lỗi dự án ngược dòng nếu có trường hợp tương tự.

    Đối với một số người dùng nâng cao hoặc những người đang theo con đường học tập ac / c ++, họ có thể tải xuống các -dbggói biểu tượng tương ứng . Sau đó, bạn có thể sử dụng gdbđể theo dõi luồng chương trình thông qua nguồn và nhận được hàm / lệnh chính xác làm tăng lỗi thời gian chạy.

  3. strace theo dõi cuộc gọi hệ thống

    Một công cụ khác có thể giúp là strace, tôi thích nó. Nó thực sự là một công cụ mạnh mẽ.

    Nó tự trình bày:

    Trong trường hợp đơn giản nhất, stracechạy lệnh được chỉ định cho đến khi nó thoát. Nó chặn và ghi lại các cuộc gọi hệ thống được gọi bởi một quy trình và các tín hiệu được nhận bởi một quy trình. Tên của mỗi lệnh gọi hệ thống, đối số và giá trị trả về của nó được in trên lỗi tiêu chuẩn hoặc tệp được chỉ định với tùy chọn -o.

    stracelà một công cụ chẩn đoán, hướng dẫn và gỡ lỗi hữu ích. Quản trị viên hệ thống, nhà chẩn đoán và người xử lý sự cố sẽ thấy nó là vô giá để giải quyết các vấn đề với các chương trình mà nguồn không có sẵn vì chúng không cần phải biên dịch lại để theo dõi chúng. Sinh viên, tin tặc và những người tò mò quá mức sẽ thấy rằng có thể học được rất nhiều về một hệ thống và các cuộc gọi hệ thống của nó bằng cách truy tìm các chương trình thông thường. Và các lập trình viên sẽ thấy rằng vì các cuộc gọi và tín hiệu hệ thống là các sự kiện xảy ra ở giao diện người dùng / kernel, nên việc kiểm tra chặt chẽ ranh giới này rất hữu ích để phân lập lỗi, kiểm tra độ tỉnh táo và cố gắng nắm bắt các điều kiện cuộc đua.

    Nguồn: man strace

  4. ltrace theo dõi cuộc gọi thư viện động

    ltracelà một chương trình chỉ đơn giản là chạy lệnh được chỉ định cho đến khi nó thoát. Nó chặn và ghi lại các cuộc gọi thư viện động được gọi bởi quá trình thực thi và các tín hiệu được nhận bởi quá trình đó. Nó cũng có thể chặn và in các cuộc gọi hệ thống được cắt bởi chương trình.

    Công dụng của nó rất giống với strace(1).

    Nguồn: man ltrace

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.