如何解决如何使用预处理程序定义向应用程序添加简单调试
| 我正在WinXP上开发GUI应用程序,但不幸的是std :: cerr / cout无处可去。我想添加一个简单的调试方法,将消息追加到日志文件。 我一直在散列一个几乎可行的解决方案,阅读其他文章。并能够在我的GUI应用程序中调用一个debug()方法。但是,在我试图用来找到解决方案的以下示例应用程序中,甚至都没有做到。 使用: Dev-C ++ v4.9.9.2 WinXP的 以下是我的示例应用程序的结构:C:.
| Makefile.win
| Project1.dev
|
\\---src
| bar.cpp
| bar.h
| foo.cpp
| foo.h
| main.cpp
|
+---inc
| debug.h
|
\\---log
src / bar.h:
#ifndef BAR_H
#define BAR_H
class Bar
{
public:
Bar();
};
#endif
src / bar.cpp:
#include \"bar.h\"
Bar::Bar()
{
// debug(\"I am Bar.\");
}
src / foo.h和src / foo.cpp相同,只不过将\'Bar \'更改为\'Foo \'
使用我在其他文章中找到的信息...
src / inc / debug.h:
#ifndef MY_DEBUG_H
#define MY_DEBUG_H
#include <iostream>
#include <fstream>
#include <string>
#ifndef LOGFILE
#define LOGFILE std::ofstream logfile(\"log/debug.txt\",std::ios::app);
#endif
#ifndef debug
#define debug(s) LOGFILE << \"[\" << __DATE__ << \" \" << __TIME__ \\
<< \"] \" << __FILE__ << \":\" << __LINE__ << \" \" << s << std::endl
#endif
#endif
src / main.cpp:
#include \"inc/debug.h\"
#include \"foo.h\"
#include \"bar.h\"
#include <iostream>
int main (int argc,char **argv)
{
debug(\"Starting program.\");
Foo *f = new Foo();
Bar *b = new Bar();
}
当我尝试对此进行编译时,在main.cpp的debug(\"Starting program.\");
行显示saying6ѭ时出现错误。
有人可以告诉我是什么原因导致此错误,也是一种可以在其他文件/类中应用调试消息的好方法,即取消注释行:
// debug(\"I am Bar.\");
// debug(\"I am Foo.\");
分别在bar.cpp和foo.cpp中,并在其他任何地方使用debug()?
谢谢你的帮助。
解决方法
您对日志文件的定义搞砸了。
预处理代码后,您将获得:
std::ofstream logfile(\"log/debug.txt\",std::ios::app); << \"[\" << __DATE__ << \" \" << __TIME__ \\
<< \"] \" << __FILE__ << \":\" << __LINE__ << \" \" << \"Starting Program\" << std::endl;
您需要在头文件中执行以下操作:
extern std::ofstream LOG_FILE;
并在某些cpp文件中(也许是main.cpp文件中):
#include \"debug.h\"
std::ofstream LOG_FILE(\"log/debug.txt\",std::ios::app);
要禁用调试,您可以执行以下操作:
#define debug(ignore)((void) 0)
与其他调试定义相比,未启用调试标志时。
您也可以将类初始化放在类似的“ 12”块中,以避免在不使用文件时打开文件。
, 因此,您几乎可以替换cout / cerr输出为直接指向文件。例如,有关示例,请参见http://www.cplusplus.com/reference/iostream/ios/rdbuf/。然后只需正常使用cout / cerr。您可能必须对冲洗等操作保持谨慎,至少要实时读取它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。