Hiện tại tôi đang phát triển một ứng dụng sử dụng mô-đun hệ thống tệp FUSE trong Linux (2.6 Kernel) bằng ngôn ngữ C. Do một số lỗi lập trình, ứng dụng bị treo sau khi gắn hệ thống tệp. Vì tôi là một lập trình viên mới làm quen trong môi trường Linux/C. Bạn có thể vui lòng cho tôi biết tôi có thể tùy chọn gỡ lỗi các chương trình như vậy không?Cách gỡ lỗi hệ thống tệp FUSE trong Linux
Trả lời
Trước tiên, hãy đảm bảo bạn đang biên dịch với các biểu tượng gỡ lỗi được bật (-g
tùy chọn gcc
). Trước khi bạn chạy chương trình của bạn, cho phép lõi bãi với lệnh shell:
ulimit -c unlimited
Sau đó, khi ứng dụng bị treo, nó sẽ để lại một file core
trong thư mục làm việc hiện tại (miễn là nó có thể viết thư cho nó).
Sau đó bạn có thể tải các tập tin cốt lõi trong debugger gdb
:
gdb <executable file> <core file>
... và nó sẽ cho bạn thấy nơi nó bị rơi, và cho phép bạn kiểm tra các biến và vân vân.
Bạn có thể sử dụng Valgrind với FUSE, tuy nhiên read this first để tìm hiểu về công việc xung quanh. Tôi thực sự làm như sau như là một tiện nghi cho những người khác có thể cần phải gỡ lỗi hệ thống tập tin của tôi:
#include <valgrind/valgrind.h>
if (RUNNING_ON_VALGRIND) {
fprintf(stderr,
"******** Valgrind has been detected by %s\n"
"******** If you have difficulties getting %s to work under"
" Valgrind,\n"
"******** see the following thread:\n"
"******** http://www.nabble.com/valgrind-and-fuse-file-systems"
"-td13112112.html\n"
"******** Sleeping for 5 seconds so this doesn't fly by ....",
progname, progname);
sleep(5);
fprintf(stderr, "\n");
}
tôi làm việc trên FUSE rất nhiều .. và 90% thời gian treo của tôi là do rò rỉ gây ra sự OOM kẻ giết người để hành động, dereferencing một con trỏ xấu, đôi miễn phí(), vv Valgrind là một công cụ tuyệt vời để nắm bắt điều đó. GDB là hữu ích, nhưng tôi đã tìm thấy Valgrind là không thể thiếu.
Liên kết đó bị hỏng –
Nhưng hoạt động này: http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/5224 –
Chạy ứng dụng khách cầu chì của bạn với tùy chọn -d
.
Tôi biết câu hỏi này khá cũ, nhưng nếu bạn sử dụng công tắc -f
nó sẽ chạy ở nền trước, rất hữu ích để gỡ lỗi. Công tắc -s
vô hiệu hóa đa luồng, cũng rất hữu ích.
Tôi hiện đang phát triển một trình điều khiển FUSE và trang này đã rất hữu ích: http://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201109/homework/fuse/fuse_doc.html
Để báo:
printf mã gỡ lỗi printf/fprintf của bạn sẽ chỉ làm việc nếu bạn chạy với - f chuyển đổi. Nếu không, cầu chì sẽ ngắt kết nối stdout và stderr.
Cảm ơn bạn đã chọn con trỏ. Theo như tôi thấy, đây là câu trả lời hữu ích nhất. –
UML rất tốt để gỡ lỗi các phần chung của hạt nhân Linux như hệ thống tệp, lập lịch nhưng không phải nền tảng phần cứng hoặc trình điều khiển phần cụ thể của hạt nhân.
http://www.csee.wvu.edu/~katta/uml/x475.html
http://valerieaurora.org/uml_tips.html
Và nhìn vào biểu đồ một cách cẩn thận:
Bạn sẽ thấy các ứng dụng "hello" được thực hiện tất cả các bộ xử lý FUSE gọi lại. Vì vậy, đa số gỡ lỗi là trong chương trình không gian người dùng, như mô-đun hạt nhân FUSE (và libfuse) là nói chung có nghĩa là để được sử dụng bởi hệ thống tập tin ALL FUSE.
- 1. Trong hệ thống tệp FUSE bộ nhớ
- 2. Phát triển "Hệ thống tệp" cho linux, mac, windows
- 3. Làm cách nào để gỡ bỏ tệp khỏi bộ đệm hệ thống trên Linux?
- 4. Tạo vòng lặp trong hệ thống tệp Linux
- 5. C++ hệ thống linux lệnh
- 6. Cách tìm tệp định dạng dos trong hệ thống tệp linux
- 7. lỗi Đăng nhập vận tốc trên hệ thống Linux
- 8. FUSE - tài liệu chi tiết
- 9. Mã hóa hệ thống tệp cho IOS?
- 10. Cách tìm loại hệ thống tệp trong python
- 11. Hệ thống tệp TreeView
- 12. Lỗi hệ thống 0x5: CreateFileMapping()
- 13. Làm cách nào để kích hoạt tính năng gỡ lỗi động trong nhân Linux?
- 14. Cách đọc tệp nhật ký hệ thống trong Android?
- 15. reinitialize biến môi trường hệ thống rộng trong linux
- 16. Ghi nhật ký hệ thống tệp Android
- 17. Đang chờ hệ thống xóa tệp
- 18. Bảng gọi hệ thống trong hạt nhân Linux ở đâu?
- 19. Lỗi trong hệ thống kiểu của Scala?
- 20. Gỡ lỗi trên Linux cho Windows Developer
- 21. Sự khác biệt giữa "hệ thống" và "exec" trong Linux?
- 22. Tệp bộ nhớ cache của hệ thống tệp Linux có hiệu quả không?
- 23. Hệ thống tệp ảo trong Perl
- 24. Node.js - Hệ thống tệp nhận loại tệp
- 25. Thay đổi số hệ thống hạt nhân linux
- 26. Gỡ lỗi SIGBUS trên x86 Linux
- 27. Grep trên nhiều tệp trong Hệ thống tệp Hadoop
- 28. chỉ đọc hệ thống tập tin trên Linux
- 29. Làm cách nào để sao chép một số tệp nhị phân vào một tệp trên hệ thống Linux?
- 30. Loại lỗi nào nên dừng hệ thống, trong hệ thống web php được phát hành?
Ý bạn là "đang sử dụng"? Bạn có thử triển khai hệ thống tệp không gian sử dụng dựa trên cơ chế cầu chì hay cái gì khác không? –
+1 - Cầu chì có thể hơi khó khăn để gỡ lỗi. –
@arsane, vâng tôi đang triển khai hệ thống tệp không gian người dùng dựa trên FUSE. – Hrishi