我在哪里可以看到 ATLTRACE 输出?

Where can I see ATLTRACE output?

我正在维护一个 C++ COM 项目。有一些跟踪线,例如 ATLTRACE(message); 我搜索了 ATLTRACE。 MSDN 告诉 Visual C++ 输出 window 会显示它。但是,该产品是一个发行版。客户将没有源代码,也无法在 VS 中对其进行调试。那么有没有其他方便的查看方式呢? Windows 事件查看器会捕捉到吗?或者我必须更改代码? Win7、VS2013

ATLTRACE 是一个在发布版本中编译为空的宏。您需要使用定义的 _DEBUG 宏重建项目(请参阅 <atltrace.h>)以显示这些内容。但是,ATLTRACE 生成的输出是调试输出字符串,通常只会显示在调试器的输出 window.

如果有您需要的重要信息,并且它在您控制的代码中,您最好将 ATLTRACE 宏用法更改为其他内容,以记录到事件日志或客户可以发送给您的日志文件。

如 1201ProgramAlarm 所述,ATL 项目的发布版本将 ATLTRACE 宏评估为空,并且二进制文件没有为各个源代码行生成实际代码。也就是说,如果不更改源代码,您将无法看到输出。

为了不对项目做太多改动,您可以重新定义跟踪宏本身并生成具有跟踪功能的发布版本,其中输出按照您定义的方式进行路由,例如使用 OutputDebugString API.

参见:

ATLTRACE 仅使用调试输出,并且仅在调试版本中有效!

因此您可以为最终用户提供一个用于测试目的的调试版本,并使用 Sysinternals 的 DebugView。但这可能很复杂,因为您还必须遍历不可重新分发的调试运行时。

但您可以轻松编写自己的 MY_TRACE 具有相同功能的宏。

#define MY_TRACE  GetMyTracer()   // returns object of CMyTracer
...

class CMyTracer
{
  ...
  // Helper operator to get the trace commands. They call the TraceV functions
  void operator()(PCSTR pszFormat, ...);
  void operator()(PCWSTR pszFormat, ...);

  // Worker functions that do the real job calling TraceV functions
  void Trace(PCSTR pszFormat, ...);
  void Trace(PCWSTR pszFormat, ...);

  // Allowed to be virtual to do some internal mystique stuff, like redirecting and this functions perform all output...
  virtual void TraceV(PCSTR pszFormat, va_list args);
  virtual void TraceV(PCWSTR pszFormat, va_list args);
  ...

现在您可以使用它代替 ATLTRACE

...
MYTRACE("Simple output\n");
MYTRACE("More complex output %d\n", 4711);

注意:将所有 ATLTRACE 宏替换为您自己的替换是不明智的。如果不影响速度,您可以将跟踪输出分布到位置,但值得提供信息。