【问题标题】:c++ debug logging on windows [closed]c++ 在 windows 上调试日志记录 [关闭]
【发布时间】:2016-01-18 05:01:28
【问题描述】:

我很好奇在 Windows 上为 c++ win32 应用程序记录调试打印信息的最常见和/或接受的方式是什么。我没有使用 Visual Studio,而是使用 GCC 进行编译。

我习惯在 Android 上开发,使用 logcat 编写和监控日志。 win32有这样的吗?

编辑:

最常见的是使用这样的东西吗?

https://msdn.microsoft.com/en-us/library/6xkxyz08.aspx

【问题讨论】:

  • 不幸的是,要求推荐某些东西的问题是题外话......
  • std::clog 怎么样?例如,您可以使用this technique 将其输出重定向到文件。
  • 您希望将简单的文本消息写入文件? Windows doesn't do that。不过,可能有一百万个记录器实用程序可以这样做。我知道没有占主导地位的白背日志包。
  • 我们如何知道什么是最常见的?在嵌入式系统世界中,我们写入文件或输出到调试端口。嵌入式系统很常见,所以这将是很常见的事情。另一种方法是将日志写入非易失性内存,然后在应用程序完成后转储非易失性内存。
  • 好的。所以请耐心等待我的天真。 Windows 上没有像 android 上那样的标准日志记录方法吗?所以我应该只编写自己的代码来记录到文件,还是使用第三方 api?

标签: c++ windows logging


【解决方案1】:

虽然它不提供过滤和每日/大小翻转的附加功能,但OutputDebugString 是一个很好的 API,允许您发送调试日志消息。

可以使用特殊程序检索和显示输出,当程序未启动时,输出会被忽略。

在本文中了解更多信息:How to view output of OutputDebugString?(可以从 C++ 使用相同的 API 调用)

根据输出的大小,您可能希望使用 Windows 的 Eventlog 或类似的日志框架 http://log4cpp.sourceforge.net/

【讨论】:

  • 如何使用它?我需要使用什么库?
  • OutputDebugString 是对 Windows 的内置 API 调用,因此不需要额外的库
  • 它对我不起作用。我必须包括“windows.h”
  • @ScottF:OutputDebugString 的文档解释了函数在哪个头文件中声明(WinBase.h),您应该包含哪个头文件( Windows.h),以及要添加的导入库(Kernel32.lib)。
  • @ScottF Windows.h 是标题,而不是库
【解决方案2】:

用于登录 Windows 的标准基础结构是 Event Tracing。它在操作系统的所有部分都可用(和使用),包括用户模式应用程序和内核模式模块:

目的
Windows 事件跟踪 (ETW) 为应用程序程序员提供了启动和停止事件跟踪会话、检测应用程序以提供跟踪事件和使用跟踪事件的能力。跟踪事件包含事件标头和提供程序定义的数据,用于描述应用程序或操作的当前状态。您可以使用这些事件来调试应用程序并执行容量和性能分析。

在适用的情况下
当您想要检测应用程序、将用户或内核事件记录到日志文件以及从日志文件或实时使用事件时,请使用 ETW。

开发者受众
ETW 专为编写用户模式应用程序的 C 和 C++ 开发人员而设计。

运行时要求
ETW 包含在 Microsoft Windows 2000 及更高版本中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2015-10-17
    • 2012-10-23
    • 2020-09-12
    相关资源
    最近更新 更多