65.9K
CodeProject 正在变化。 阅读更多。
Home

在Developer Studio的输出窗口中双击跟踪消息以转到代码行

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.22/5 (36投票s)

2003年4月17日

CPOL

1分钟阅读

viewsIcon

156831

利用Developer Studio中的输出窗口

引言

在某些情况下,你可能会发现将调试转储格式化成如下形式是有益的:

filepathname.cpp(123) : something

当此类行显示在开发者工作室/Visual Studio的输出窗口中时,你可以双击它,并跳转到由文件路径/行号模式指定的位置。生成带有易于访问原始行的调试转储非常方便,所以我编写了一个宏来使用__FILE____LINE__预处理器格式化调试转储。

我最初在知识库文章 HOWTO: 使用 #pragma 生成用户定义的警告消息中发现了构建输出窗口的此功能,它几乎可以完美地插入 TODO 块。后来,我尝试在调试输出中使用它,并发现它也存在于调试输出窗口中。它可能也适用于其他输出窗口。

更多信息

以下代码说明了如何告诉编译器使用文件路径和行号格式化调试转储:

// collisions.h
#ifdef _DEBUG
#define TRACE_LINE(string) \
{\
  CString  strTrace;           \
  strTrace.Format("%s(%d) :  \t%ld:\t%s",  \
    __FILE__,__LINE__,timeGetTime(),string);       \
  if (strTrace.GetLength() > 512) \
    TRACE("TRACE string too long !\r\n"); \
  else TRACE(strTrace);}
#else
#define TRACE_LINE(string)              void(0)
#endif

// collisions.cpp
TRACE_LINE("Need to do 3D collision testing") ;

调试输出

collisions.cpp.cpp(123) : Need to do 3D collision testing

我还有其他变体,例如TRACE_LINE1,它接受一个格式字符串和一个参数,以及TRACE_LINE2,它接受一个格式字符串和两个参数,等等。你当然也可以编写一个没有 MFC 支持的版本。

有关__FILE____LINE__预定义宏的更多信息,请参阅 Visual C++ 帮助文件;搜索“预定义宏”,主题“预处理器参考”,然后单击“ANSI”。

© . All rights reserved.