2017-01-12 83 views
-1

我在使用beaglebone的prussdrv庫(http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader_API_Guide)在C++中編寫程序,在我的代碼中導入prussdrv.h,以便我可以使用它定義的所有函數。爲庫激活調試

但是,一些函數調用返回-1,我想知道確切的問題。

if (fPtr == NULL) { 
    DEBUG_PRINTF("File %s open failed\n", filename); 
return -1; 
} else { 
    DEBUG_PRINTF("File %s open passed\n", filename); 
} 

那些DEBUG_PRINTF聲明可以通過一個printf代替通過定義__DEBUG宏:

#ifdef __DEBUG 
#define DEBUG_PRINTF(FORMAT, ...) fprintf(stderr, FORMAT, ## __VA_ARGS__) 
#else 
#define DEBUG_PRINTF(FORMAT, ...) 
#endif 
返回-1時看到的源代碼( https://github.com/beagleboard/am335x_pru_package/blob/master/pru_sw/app_loader/interface/prussdrv.c)我發現有很多電話打印的東西到stderr

但是,不清楚如何定義它來啓用調試。我試着用-D__DEBUG標誌編譯我的代碼,但它沒有工作。它應該嗎?如果我在我的機器上搜索源文件並更改它,只需要離開#define,它會起作用嗎?爲導入的庫啓用調試的正確方法是什麼? 謝謝!

回答

3

如果要激活庫的調試打印,則必須使用-D__DEBUG進行編譯,然後將代碼與庫的該調試版本鏈接。

換句話說,您應該編譯與此標誌,不是您的代碼。然後你會得到這個庫的兩個版本:生產和調試。喜歡使用不同庫版本的代碼會導致不同的行爲。