视觉工作室。调试。如何将变量在运行期间的所有值保存到文件中?
Posted
技术标签:
【中文标题】视觉工作室。调试。如何将变量在运行期间的所有值保存到文件中?【英文标题】:Visual Studio. Debug. How to save to a file all the values a variable has had during the duration of a run? 【发布时间】:2016-09-30 11:00:43 【问题描述】:我正在观察一个变量,它在一次运行期间被分配了数千个值。它被设置了好几次,并且很难仅通过在重新分配的位置设置断点来跟踪代码工作流程。 有没有办法将变量必须的所有值输出到 .txt 文件?我想在不修改实际 C++ 代码的情况下实现这一点,只需使用调试工具即可。
【问题讨论】:
使用可以使用trace()命令将变量状态输出到调试器控制台。如果要将值转储到文本文件中,可以使用 fstream 函数。 最简单的方法:设置一个转储值的跟踪点(带有您喜欢的一些签名)。完成后,您可以简单地将调试输出复制到文件中,然后搜索您的签名。与@seccpur 的建议相反,这不需要任何代码更改。 【参考方案1】:要真正接近您要查找的内容,您需要结合 Visual Studio 的两个功能:数据断点和跟踪点。数据断点允许您在内存中的存储值更改时通知调试器。要设置数据断点,启动调试器,然后选择 Debug → New Breakpoint → Data Breakpoint...:
由于我们对变量 myValue
感兴趣,我们将地址设置为 &myValue
,并将大小设置为 4 字节(因为这就是 int
在 Windows 上的含义):
现在这已经很酷了。但对于非侵入式日志记录,我们还将设置 Actions:
重要的设置是日志消息([MYSIG]
是任意签名,以便稍后可以过滤有趣的日志条目),转储变量的值,以及 继续执行 em> 复选框。后者使得这种非侵入性(或低侵入性;记录大量信息确实对运行时性能有显着影响)。
准备好之后,运行这段代码
inline void DataTracepoint()
volatile int myValue 0 ;
for ( int i = 0; i < 10; ++i )
myValue = i;
在 Debug 输出窗格中产生以下输出:
[MYSIG] myValue = 0 [MYSIG] myValue = 1 [MYSIG] myValue = 2 [MYSIG] myValue = 3 [MYSIG] myValue = 4 [MYSIG] myValue = 5 [MYSIG] myValue = 6 [MYSIG] myValue = 7 [MYSIG] myValue = 8 [MYSIG] myValue = 9
然后可以在您喜欢的文本处理器中轻松分析此输出。
【讨论】:
以上是关于视觉工作室。调试。如何将变量在运行期间的所有值保存到文件中?的主要内容,如果未能解决你的问题,请参考以下文章