2009-12-09 91 views
10

目前,我正在使用C語言在Linux(2.6 Kernel)中使用FUSE文件系統模塊開發應用程序。由於編程錯誤,安裝文件系統後應用程序崩潰。因爲我是Linux/C環境中的新手開發人員。你能讓我告訴我可能的選項來調試這些程序嗎?如何在Linux中調試FUSE文件系統崩潰

+0

你是什麼意思「使用」?您是否嘗試實施基於熔絲機制或其他功能的使用空間文件系統? – 2009-12-09 06:25:41

+4

+1 - FUSE調試可能有點痛苦。 – 2009-12-09 12:31:38

+0

@arsane,是的,我正在實現一個基於FUSE的用戶空間文件系統。 – Hrishi 2009-12-09 15:34:51

回答

6

首先,確保您正在編譯啓用調試符號(-g選項爲gcc)。你運行程序之前,能夠與shell命令核心轉儲:

ulimit -c unlimited 

然後,當應用程序崩潰,它會在當前工作目錄下留下一個core文件(只要它可以寫入)。

然後,您可以加載內核文件中gdb調試器:

gdb <executable file> <core file> 

...,它會告訴你在哪裏墜毀,並讓你檢查變量等等。

2

您可以使用Valgrind與FUSE,但read this first瞭解setuid解決方法。我實際上做以下爲別人誰可能需要調試我的文件系統中的方便:時間

#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"); 
} 

我在FUSE了很多工作..和90%的我崩潰是由於這會導致泄漏OOM殺手能夠採取行動,解除引用不良指針,雙重釋放()等等。Valgrind是一個很好的工具。 GDB很有幫助,但我發現Valgrind是不可或缺的。

+0

該鏈接中斷 – 2010-01-02 06:49:28

+0

但是,這個工程:http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/5224 – 2010-01-02 06:56:23

6

-d選項運行您的保險絲客戶端。

8

我知道這個問題很老,但如果使用-f開關,它將在前臺運行,這對調試非常有幫助。 -s開關禁用多線程,這也非常有用。

我目前正在開發一個FUSE驅動程序,而這個頁面非常有幫助:http://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201109/homework/fuse/fuse_doc.html

引述:

printf的你的printf/fprintf中調試代碼,如果你與運行只會工作 - f開關。否則,保險絲斷開stdout和stderr。

+0

謝謝你的指針。據我所知,這是最有用的答案。 – 2015-11-12 19:06:42

0

UML非常適合調試linux內核文件系統的通用部分,調度但不是硬件平臺或驅動程序特定部分的內核。

http://www.csee.wvu.edu/~katta/uml/x475.html

http://valerieaurora.org/uml_tips.html

而且看仔細圖:

Image result for FUSE filesystem

您將看到應用 「你好」,這是實現所有FUSE回調處理程序。所以大多數調試都在用戶空間程序中,因爲FUSE內核模塊(和libfuse)一般意味着被ALL FUSE文件系統使用。