gpt4 book ai didi

c++ - 如何使用预处理器定义向应用程序添加简单的调试

转载 作者:行者123 更新时间:2023-11-30 18:05:41 25 4
gpt4 key购买 nike

我正在 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();
}

当我尝试编译此文件时,我在 debug("Starting program."); 处收到错误main.cpp 中的行显示 expected primary-expression before '<<' token .

有人可以告诉我导致此错误的原因以及然后能够在其他文件/类中应用调试消息的好方法,即取消注释行:

//    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)

与其他调试定义相比,当您的调试标志未启用时。

您还可以将类初始化放在类似的 #ifdef block 中,以避免在不使用文件时打开该文件。

关于c++ - 如何使用预处理器定义向应用程序添加简单的调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6196305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com