2014-02-13 61 views
0

如何將調試消息寫入文件?將c中的調試信息寫入文件?

我使用:

void printLog(const char* mylog) 
{ 
    #ifdef DEBUG 

    FILE* pFile = fopen("mylog.txt", "a"); 
    fprintf(pFile, "%s\n",mylog); 
    fclose(pFile); 

    #endif 

} 

但我怎麼能寫命令,以便調試?

編輯:

我的意思是,就像我知道在Android中,你的國家,例如Log.i("MyActivity", "MyClass.getView() — get item number " + position);

我可以在文件中寫入類似c的東西嗎? 變量也許,錯誤等

我使用:gcc -g -DEBUG -o myexec myfile.c

+0

你所說的實際問題的意思,即「爲了寫命令調試」嗎?請澄清一下,我無法理解你的意思。 – unwind

+0

我想他想要一個簡單的打印方式,像文件說:myDebug(「這將文件」); –

+0

@unwind:我更新了。是的,像「Cool_Coder」寫道 – George

回答

2

如果你想要做的格式,你可以使用vfprintf()這就好比printf()但打印到文件中,並用「包裝」參數:

void printLog(const char *fmt, ...) 
{ 
#ifdef DEBUG 
    FILE* pFile = fopen("mylog.txt", "a"); 
    if(pFile != NULL) 
    { 
    va_list args; 
    va_start(args, fmt); 
    vfprintf(pFile, fmt, args); 
    va_end(args); 
    fclose(pFile); 
    } 
#endif 
} 

然後你可以使用此類似:

printLog("you have %d attempts left", numAttempts); 

或什麼的。

您也可以#define一個宏的實際調用,並編譯它當然。如上所述,這些調用將保留,但被調用的函數將變爲空。一個聰明的編譯器可能會優化這種調用,但你永遠無法確定。

假設C99,這樣一個宏可能是這樣的:

#if defined DEBUG 
#define LOG(fmt, ...) printLog(fmt, __VA_ARGS__); 
#else 
#define LOG(fmt, ...) /* empty when debugging disabled */ 
#endif 
+0

如果你使用var args,你會如何在這種情況下定義一個宏? – jia103

+0

@unwind:好的,非常感謝! – George