c++跟踪日志问题,fstream访问冲突问题
C++ Trace Logging Question, fstream access violation question
这实际上是两个问题,我将从最简单的开始。在这个简单程序的末尾,我得到了一个访问冲突异常。这是在MSVC6(是的,我知道…)。
int main()
{
std::fstream logFile("clog.txt");
std::clog.rdbuf( logFile.rdbuf() );
// ... use clog ...
logFile.close(); // I've tried removing this, same problem.
return 0;
}
第二个问题是我如何尝试应用std::clog。我想实现一个相当简单的跟踪功能,它只在调试时激活。在"发布模式"期间的任何跟踪都会太慢。
我现在的想法基本上是:
#define TRACE_LOG_TOGGLE 1
#if TRACE_LOG_TOGGLE
#define TRACE_LOG(a) // something that ultimately uses std::clog
#else
#define TRACE_LOG(a) // empty.
#endif
首先,是否有人知道在MSVC6中是否有一个像_DEBUG_
这样的预处理器常数或与配置是否为调试或发布模式相对应的东西?这将消除程序员手动切换的需要(但这是一个非常小的问题)。
更详细的问题是,是否有某种模板神奇的方法来实现这个无宏。我觉得用宏开始每个函数有点像穴居人。
三个要点:
(1)此程序存储在DLL中。如果有两个完全相同的函数,一个带跟踪,一个不带跟踪,那就再好不过了。事实上,这是最理想的。我不在乎二进制文件的大小是不是原来的两倍,只要它能提高代码的可维护性就行。
(2)"发布模式"函数必须有一个NOOP用于跟踪日志记录。
(3)我不想让每个函数都是带有跟踪日志参数的模板函数。
一如既往,提前感谢各位。
对于第一个问题,您可能希望恢复原始缓冲区。比如:
std::fstream logFile("clog.txt");
streambuf * old = std::clog.rdbuf( logFile.rdbuf() );
// ... use clog ...
std::clog.rdbuf( old );
logFile.close(); // I've tried removing this, same problem.
或者创建一个RAII类来处理它。
对于跟踪,可以使用宏。我将坚持使用您自己的#define,因为这样您可以选择在非调试构建中使用跟踪。
相关文章:
- 警告处理为错误这里有什么问题
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 在类中使用fstream时出现问题
- FSTREAM的问题读取确定,但不编写用户输入字符串
- STD :: FSTREAM文件处理重复使用的问题
- Fstream Operator << & Operator >> 有什么问题?
- 可视化了一个关于c++文件I/O和fstream的问题
- Fstream c++ Code & Ercise 问题
- c++向类成员发送引用fstream函数问题
- 在 Xcode 中使用 fstream 时遇到问题
- 工资单项目中的 FSTREAM 问题
- 64位cygwin下的fstream问题
- fstream 和 eof() 的问题(总共花了 5 个小时进行调试、寻找解决方案和测试)
- 遇到getline、fstream、作用域不一致的问题
- fstream打开在处理较大的文件时有问题吗?
- 使用fstream (windows窗体,c++ /CLI)编写和读取的问题
- 在DLL中使用fstream读取文件的问题
- 关于c++中fstream的几个问题
- C++使用fstream对象读取和写入文本文件时出现问题
- c++跟踪日志问题,fstream访问冲突问题