如何将记录写入Visual Studio输出窗口?

时间:2018-01-30 07:48:11

标签: c++ visual-studio visual-studio-2017

我想通过一种日志记录扩展我的应用程序,可以选择登录文件和/或登录“Visual Studio”“输出”窗口。

对于后者,似乎函数OutputDebugString()正在执行这个技巧,但仅适用于“Debug”构建,我希望这也适用于“Release”构建,所以我想出了使用跟踪点的想法(至少,我认为跟踪点也写入“发布”版本的“输出”窗口),但在这里我有一个相当令人沮丧的问题:
跟踪点是一种特殊的断点,似乎写入* .suo文件,存在于<project directory>\.vs\<project name>\v15目录中(参见Where are Visual Studio breakpoints saved?。,谢谢,Max)。
我的想法是编写一个postbuild事件,在* .suo文件中的每一行添加一个跟踪点,其中调用log()操作。

然而,由于* .suo文件是二进制的简单原因,这是不可能的: - (

有没有人知道在构建时向应用程序添加跟踪点的另一种方法,或者如何在Visual Studio的“输出”窗口中编写(使用“Debug”/“Release”开关)?

提前致谢

1 个答案:

答案 0 :(得分:0)

OutputDebugString()应该在Release版本中工作 - 如果有任何东西要消耗输出(例如WinDbg。)Debugging Tools for Windows (WinDbg, KD, CDB, NTSD) 至于它为什么不是 - 可能想要研究一下,因为你的应用程序可能没有像你期望的那样构建。

据我了解,Tracepoints仅适用于调试器(调试或发布) - 但我认为这种方式有效,调试器将在应用程序加载/启动时(或在运行期间)实际用指令替换指令BRK和当应用程序触发中断时,调试器捕获它,替换原始指令,然后执行它应该执行的任何任务(无论是暂停,递增计数器等) - 但我认为Tracepoints只能用于附加调试器,否则没有什么可以执行替换,捕获和替换操作,代码不会中断运行。

但是,如果我正确地阅读了您的意图,您可能实际上想要使用类似Event Tracing *的内容。这应该输出您想要查看的标准Windows日志文件,将在调试器内部或外部的调试或发布中工作。但是它不会输出到VS输出窗口。为此,OutputDebugString()应该是正确的操作。

*免责声明 - 我自己并未使用它们,因为我们现在使用VS输出和WinDbg - 但对于已部署的应用程序来说,它看起来更好。前进。