2009-11-19 38 views
18

Máy linux đóng băng vài giờ sau khi khởi động và chạy phần mềm (bao gồm cả trình điều khiển tùy chỉnh). Tôi đang tìm một phương pháp để gỡ lỗi vấn đề như vậy. Gần đây, đã có những tiến bộ đáng kể trong kỹ thuật gỡ lỗi hạt nhân Linux, phải không?Các kỹ thuật gỡ lỗi hạt nhân Linux hiện tại

Tôi vui lòng yêu cầu chia sẻ một số kinh nghiệm về chủ đề này.

+0

@tinkertim: ý bạn là chưa đủ? :) – leppie

Trả lời

5

SystemTap dường như là Linux đối với Dtrace là gì đối với Solaris .. tuy nhiên tôi thấy nó khá là thù địch khi sử dụng. Tuy nhiên, bạn có thể muốn thử. NB: biên dịch hạt nhân với thông tin gỡ lỗi và dành một chút thời gian với các móc thiết bị hạt nhân.

Đây là lý do tại sao rất nhiều người vẫn đang sử dụng printk() sau khi thu hẹp một lỗi thực nghiệm xuống một mô-đun cụ thể.

Tôi không đề xuất nó, chỉ cần chỉ ra rằng nó tồn tại. Tôi có thể không đủ thông minh để đánh giá cao một số vẻ đẹp cơ bản .. Tôi chỉ viết trình điều khiển cho các thiết bị lẻ.

+1

+1 để tham chiếu đến SystemTrap. Trông đầy hứa hẹn. Tôi là một trong những kẻ in ấn này. – dmeister

2

Có nhiều kỹ thuật khác nhau tùy thuộc vào loại sự cố bạn muốn gỡ lỗi. Trong trường hợp của bạn, câu hỏi đầu tiên là "hệ thống có thực sự bị đóng băng không?". Bạn có thể kích hoạt khóa sysrq ma thuật và kiểm tra trạng thái hệ thống khi đóng băng và đi từ đó.

Có lẽ phương pháp trực tiếp mạnh nhất là bật trình gỡ lỗi hạt nhân và kết nối với nó qua cáp nối tiếp.

6

Nếu bạn có thể tạo lại sự cố bên trong máy ảo, thực sự có một kỹ thuật khá mới (AFAIK) có thể hữu ích: gỡ lỗi máy ảo từ máy chủ lưu trữ.

Xem ví dụ này: Debugging Linux Kernel in VMWare with Windows host

VMware Workstation 7 cũng cho phép một kỹ thuật mạnh mẽ cho phép bạn thực hiện hệ thống ghi lại tất định và sau đó phát lại nó như mong muốn, thậm chí thụt lùi. Vì vậy, ngay sau khi hệ thống bị treo, bạn có thể quay trở lại và xem những gì đã xảy ra sau đó (và thậm chí thử thay đổi một cái gì đó và xem nếu nó vẫn còn treo). IIRC Tôi đọc ở đâu đó bạn không thể làm điều này và gỡ lỗi hạt nhân bằng cách sử dụng VMware/gdb cùng một lúc.

Rõ ràng, bạn cần VMM cho việc này. Tôi không biết những gì khác ngoài VMM của VMware hỗ trợ gia đình này, và tôi không biết nếu bất kỳ phiên bản VMware miễn phí hỗ trợ này. Có khả năng không; người ta không thể thực sự mong đợi một công ty thương mại từ bỏ mọi thứ miễn phí. Phiên bản dùng thử là 30 ngày.

Nếu trình điều khiển tùy chỉnh của bạn dành cho phần cứng bên trong máy, thì tôi cho rằng điều này có thể không hoạt động.

+0

Lưu ý rằng điều này không yêu cầu bật bất kỳ loại hỗ trợ gỡ lỗi nào bên trong VM; bản thân VM là không bị xáo trộn và về mặt lý thuyết hoàn toàn không biết nó đang được sửa lỗi. Thay vào đó, máy trạm có một gdb stub được xây dựng trực tiếp vào nó để điều khiển CPU ảo hóa. – Paul

0

Làm thế nào tôi gỡ lỗi loại lỗi này, là chạy hệ điều hành của tôi bên trong VirtualBox và biên dịch hạt nhân bằng nội dung được tạo sẵn bằng kgdb. Sau đó, tôi thiết lập một giao diện điều khiển nối tiếp trên VirtualBox để tôi có thể gdb với hạt nhân bên trong hệ điều hành VirtualBox thông qua giao diện điều khiển nối tiếp. Bất cứ lúc nào hệ điều hành treo, giống như khóa sysrq ma thuật, tôi có thể nhập ctrl-c trên gdb để dừng và hiểu hạt nhân tại thời điểm đó.

Thông thường truy tìm ngăn xếp hạt nhân quá khó để xác định quy trình thủ phạm, vì vậy cách tốt nhất tôi nghĩ vẫn là lệnh "trên cùng", chỉ cần nhìn vào nhật ký ứng dụng để xem nguyên nhân của việc treo là gì khởi động lại để xem nhật ký của khóa học.

0

Một tùy chọn là sử dụng Kprobes. Tìm kiếm nhanh trên google sẽ hiển thị cho bạn tất cả thông tin bạn cần. Nó không phải là đặc biệt khó sử dụng. Kprobes được tạo ra bởi IBM Tôi tin là một giải pháp để gỡ lỗi hạt nhân.Về cơ bản nó là một dạng phức tạp của printk() tuy nhiên nó cho phép bạn xử lý bất kỳ "điểm ngắt" nào mà bạn chèn bằng các trình xử lý. Nó có thể là những gì bạn đang tìm kiếm. Tất cả bạn cần làm là viết và 'insmod' một mô-đun vào hạt nhân sẽ xử lý bất kỳ "breakpoint" hit mà bạn chỉ định trong module.

Hy vọng rằng đó có thể là một tùy chọn hữu ích ...

Các vấn đề liên quan