c++ - 是否有 C++11 或 Win32 方法来可靠地生成和保存跟踪信息?

标签 c++ winapi c++11 logging trace

我正在使用 C++11 (VS2013) 开发一个 COM 组件,它被加载到沙箱中的另一个进程中——尽管它具有写入磁盘的能力。

我编写了自己的跟踪函数,它进入临界区/互斥体,打开文件进行追加,写入时间戳和消息,离开互斥体并返回。

但是我发现我写的这个跟踪函数有点不稳定:一些断言由于不同系统上未知的原因而失败 - 考虑到跟踪函数用于跟踪其他问题,这有点讽刺。所以我需要一个可靠的追踪系统。

CRT、C++ 标准库或 Win32 中是否有任何函数提供非常简单的(通常)不会失败的“即发即弃”日志记录功能?我看过 ReportEvent,但由于沙箱的原因,我认为这对我的情况不起作用。

最佳答案

您应该查看 Windows 事件跟踪。它非常符合您的需要:您在应用程序开始时调用 EventRegister(),然后调用 EventWrite() 来报告事件。您不需要任何特殊的系统权限——甚至不需要写入磁盘。当您的程序正常运行时,它不会产生任何输出。但是,如果有人正在监听事件(例如使用 Windows 性能记录器),这些事件将最终出现在跟踪文件中,可以使用各种程序查看该文件(如果愿意,您甚至可以自己编写一个监听器) .

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364162%28v=vs.85%29.aspx

关于c++ - 是否有 C++11 或 Win32 方法来可靠地生成和保存跟踪信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957208/

相关文章:

c++ - 在 C++ 中访问蓝图类组件的正确方法是什么

c++ - #导入 : Cannot open file "soap12.h" for reading gSoap in VS 2010

C++ BitBlt 显示棋盘和偏色

c++ - 为什么在 win32 中有不同的 TEXT like macros for same thing?

c++ - 为什么 std::move 会阻止 RVO(返回值优化)?

c++ - 如何启动具有 root 权限的 QProcess?

C++ Lite 问题 10.19。函数而不是变量声明

c++ - 我的 RichEdit 控件可以包含可点击的链接吗?

c++ - 在 async_write 挂起时写入 streambuf 是否安全?

C++11 简单生产者消费者多线程