Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中设计一个类似gem5的调试函数?_C_Gem5 - Fatal编程技术网

如何在C语言中设计一个类似gem5的调试函数?

如何在C语言中设计一个类似gem5的调试函数?,c,gem5,C,Gem5,gem5中的调试信息真是太棒了。 您只需要使用DPRINTF(FLAGA,“%d”,value)输出调试信息的位置 如果在编译时添加--debug flag=FLAGADPRINTF(FLAGA,“%d”,value);将变成printf(“%d”,value)否则它将变为空 这是通过条件编译实现的。但我不知道如何根据上面的标志编译。 我想到的是: #include<stdio.h> #define NOOP //(void(0)) #undef DCOUT #undef DPR

gem5中的调试信息真是太棒了。 您只需要使用
DPRINTF(FLAGA,“%d”,value)输出调试信息的位置

如果在编译时添加
--debug flag=FLAGA
DPRINTF(FLAGA,“%d”,value);
将变成
printf(“%d”,value)否则它将变为

这是通过条件编译实现的。但我不知道如何根据上面的标志编译。 我想到的是:

#include<stdio.h>

#define NOOP //(void(0))

#undef DCOUT
#undef DPRINTF

#ifdef DEBUG_OUT
#define DPRINTF(...) printf(__VA_ARGS__)
#else 
#define DPRINTF(...) NOOP
#endif 

#undef DEBUG_OUT
编译时,如果我添加
--debugflag=DEBUGA

`DPRINTF("DEBUGA","%d",val1);`   -->  `printf("%d",val1);`, 
`DPRINTF("DEBUGB", "%d", val2);   --> empty
编译时,如果我添加
--debugflag=DEBUGB

`DPRINTF("DEBUGA","%d",val1);`   --> empty, 
`DPRINTF("DEBUGB", "%d", val2);` -->`printf("%d",val2);.

有人能给我一些建议吗?

我不知道我是否理解。 但我想你想要这个:

头文件:

\ifndef包括
#定义INCLUDE_GUARD_H
#ifdef调试出
#定义DPRINTF(级别、格式等)调试打印F(级别、格式、参数)
#否则
#定义DPRINTF(级别、格式等);
#恩迪夫
#定义级别跟踪1
#定义调试2级
#定义第三级错误
#定义第4级
国际基里维尔外展;
#恩迪夫
源文件:

int giLevel=LEVEL\u调试;
#ifdef调试出
void DebugPrintf(整数级,常量字符*格式,…)
{
如果(电平<基电平)返回;
va_列表标记;
va_开始(标记、格式);
vprintf(格式、标记);
va_端(标记);
}
#恩迪夫
使用printf compile通过选项
-DDEBUG\u OUT
使用日志进行编译。 您可以通过变量
giLevel

如果要将其保存在文件中,请将函数DebugPrintf更改为使用
vfprintf

您还可以在
DPRINTF
原型中添加
\uuuu行
\uuuu文件
,以添加日志的位置


否则,您可以在Linux或cygwin上使用类似于rsyslog的库。

我不知道是否理解。 但我想你想要这个:

头文件:

\ifndef包括
#定义INCLUDE_GUARD_H
#ifdef调试出
#定义DPRINTF(级别、格式等)调试打印F(级别、格式、参数)
#否则
#定义DPRINTF(级别、格式等);
#恩迪夫
#定义级别跟踪1
#定义调试2级
#定义第三级错误
#定义第4级
国际基里维尔外展;
#恩迪夫
源文件:

int giLevel=LEVEL\u调试;
#ifdef调试出
void DebugPrintf(整数级,常量字符*格式,…)
{
如果(电平<基电平)返回;
va_列表标记;
va_开始(标记、格式);
vprintf(格式、标记);
va_端(标记);
}
#恩迪夫
使用printf compile通过选项
-DDEBUG\u OUT
使用日志进行编译。 您可以通过变量
giLevel

如果要将其保存在文件中,请将函数DebugPrintf更改为使用
vfprintf

您还可以在
DPRINTF
原型中添加
\uuuu行
\uuuu文件
,以添加日志的位置


否则,您可以在Linux或cygwin上使用类似于
rsyslog
的库。

不能将其保留在哪个选项下。你能澄清一下你的意思吗?谢谢你的回复。我添加了一个解释。
#定义DPRINTF(名称,格式,…)DPRINTF###名称(格式,参数)
然后创建每个要使用的
DPRINTF xxx
,并调用
DPRINTF(debuga,“%d”,val1),或者您忘记了空,只在代码中输入一个返回值来比较名称。您不应该在应用程序的日志版本中考虑性能问题。
--debug flag
在gcc、msvc或clang中不存在,请使用
-D
语法。它不能保留在哪个选项下。你能澄清一下你的意思吗?谢谢你的回复。我添加了一个解释。
#定义DPRINTF(名称,格式,…)DPRINTF###名称(格式,参数)
然后创建每个要使用的
DPRINTF xxx
,并调用
DPRINTF(debuga,“%d”,val1),或者您忘记了空,只在代码中输入一个返回值来比较名称。您不应该在应用程序的日志版本中考虑性能问题。
--debug flag
在gcc、msvc或clang中不存在,请使用
-D
语法。谢谢。我想更清楚地理解#define的用法,但我在Google上只找到了最基本的用法,没有参数。在哪里可以找到关于#define parameters更详细的介绍?@cyj您可以查看gcc文档:。你需要知道的就是这些。如果您正在使用其他编译器,某些功能可能会有所不同,那么您将需要搜索其他功能。大部分都能用,谢谢。我想更清楚地理解#define的用法,但我在Google上只找到了最基本的用法,没有参数。在哪里可以找到关于#define parameters更详细的介绍?@cyj您可以查看gcc文档:。你需要知道的就是这些。如果您正在使用其他编译器,某些功能可能会有所不同,那么您将需要搜索其他功能。大部分都可以在任何地方使用。
`DPRINTF("DEBUGA","%d",val1);`   --> empty, 
`DPRINTF("DEBUGB", "%d", val2);` -->`printf("%d",val2);.