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

时间:2017-12-01 02:02:06

标签: c++ com atl

我正在维护一个C ++ COM项目。有一些跟踪线像ATLTRACE(消息); 我搜索了ATLTRACE。 MSDN告诉Visual C ++输出窗口会显示它。但是,该产品是一个版本。客户不具备源代码,也无法在VS中对其进行调试。那么还有其他方便的方式来看吗? Windows事件查看器会抓住它吗?或者我必须更改代码? Win7,VS2013

3 个答案:

答案 0 :(得分:1)

ATLTRACE仅使用调试输出,它仅适用于Debug版本!

因此,您可以为最终用户提供用于测试目的的调试版本,并使用来自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宏是不明智的。您可以将跟踪输出扩展到没有影响速度的位置,但值得提供信息。

答案 1 :(得分:0)

.on("mousemove", function(d) { tooltip .style("display", "inline-block") .html(d[d.index].data[d.key]); }) 是一个在发布版本中编译为空的宏。您需要使用定义的_DEBUG宏重建项目(请参阅ATLTRACE)以显示这些项目。但是,<atltrace.h>生成的输出是调试输出字符串,通常只显示在调试器的输出窗口中。

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

答案 2 :(得分:0)

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

为了不多改变项目,您可以重新定义跟踪宏本身并生成具有跟踪功能的发布版本,其中输出按照您的定义进行路由,例如使用OutputDebugString API进行标准调试输出。 / p>

请参阅: