我在哪里可以看到Atltrace输出

Where can I see ATLTRACE output?

本文关键字:Atltrace 输出 在哪里      更新时间:2023-10-16

我正在维护C com项目。有一些跟踪行,例如Atltrace(消息);我搜索了Atltrace。MSDN告诉Visual C 输出窗口将显示它。但是,该产品是发行版。客户将没有来源,也不会在VS中进行调试。那么还有其他方便的观看方式吗?Windows Event Giewer会抓住吗?还是我必须更改代码?Win7,VS2013

atltrace仅使用调试输出,仅在调试版本中起作用!

因此,您可以为Ednuser提供一个调试版本以进行测试,并使用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 outputn");
MYTRACE("More complex output %dn", 4711);

注意:用自己的替换替换所有Atltrace宏是不明智的。您可能会将痕量输出传播到没有影响的联合国速度的情况下,但值得信息。

ATLTRACE是一个宏,在发行版中毫无汇编。您需要使用_debug宏定义(请参阅<atltrace.h>)重建项目以使这些项目显示。但是,ATLTRACE生成的输出是一个调试输出字符串,通常仅在调试器的输出窗口中显示。

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

如1201 Programagrarm所述,ATL项目的发布构建对ATLTRACE宏进行了评估,并且二进制文件没有针对各自的源代码行生成的真实代码。也就是说,您在不更改源代码的情况下看不到输出。

为了不太更改项目,您可以重新定义跟踪宏本身,并具有跟踪功能的产生释放构建,其中输出可以按照您定义,例如使用OutputDebugString API进行标准调试输出。

请参阅:

  • 如何在发布模式下启用跟踪宏?
  • AtlReleasEtrace