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