我用C ++编写一个使用beaglebone的prussdrv库(http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader_API_Guide)的程序,在我的代码中导入prussdrv.h,以便我可以使用它定义的所有函数。
然而,一些函数调用返回-1,我想知道确切的问题。看到源代码(https://github.com/beagleboard/am335x_pru_package/blob/master/pru_sw/app_loader/interface/prussdrv.c)我发现有很多调用在返回-1时向stderr打印一些东西:
if (fPtr == NULL) {
DEBUG_PRINTF("File %s open failed\n", filename);
return -1;
} else {
DEBUG_PRINTF("File %s open passed\n", filename);
}
通过定义__DEBUG宏,可以用printf替换那些DEBUG_PRINTF语句:
#ifdef __DEBUG
#define DEBUG_PRINTF(FORMAT, ...) fprintf(stderr, FORMAT, ## __VA_ARGS__)
#else
#define DEBUG_PRINTF(FORMAT, ...)
#endif
但是,如何定义它以启用调试并不清楚。我尝试用-D__DEBUG标志编译我的代码,但它没有用。这应该是吗?如果我在我的机器中搜索源文件并更改它,只是离开#define,它会工作吗?为导入的库启用调试的正确方法是什么? 谢谢!
答案 0 :(得分:3)
如果要激活库的调试打印,则必须使用-D__DEBUG
进行编译,然后将代码链接到库的调试版本。
换句话说,您应该使用此标志编译库,而不是您的代码。然后你将拥有这个库的两个版本:生产和调试。喜欢使用不同库版本的代码会导致不同的行为。