视觉工作室。调试。如何将变量在运行期间的所有值保存到文件中?

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 的两个功能:数据断点和跟踪点。数据断点允许您在内存中的存储值更改时通知调试器。要设置数据断点,启动调试器,然后选择 DebugNew BreakpointData 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

然后可以在您喜欢的文本处理器中轻松分析此输出。

【讨论】:

以上是关于视觉工作室。调试。如何将变量在运行期间的所有值保存到文件中?的主要内容,如果未能解决你的问题,请参考以下文章

Ansible 调试消息到变量

Matlab调试器在崩溃后显示变量

nodejs 调试 - 保存脚本的状态(包含所有对象和 var 值)并在下次运行时使用它

在调试期间观察 SSIS 中的变量

在调试期间在SSIS中监视变量

如何仅在脚本期间设置环境变量?