2016-09-30 180 views
2

我正在看一个变量,在单次运行期间分配了数千个值。它被设置了好几次,并且很难通过设置断点来重新分配代码工作流。 有没有办法输出变量对.txt文件所有的值?我希望在不修改实际的C++代码的情况下实现这一点,只需使用调试工具即可。Visual Studio。调试。如何将一个变量在运行期间的所有值保存到文件中?

+0

使用可以使用trace()命令将变量状态输出到调试器控制台。如果你想将这些值转储到一个文本文件中,你可以使用fstream函数。 – seccpur

+1

最简单的方法:设置转储值的跟踪点(带有您喜欢的某些签名)。完成后,您可以简单地将Debug输出复制到文件中,然后搜索您的签名。与@seccpur的建议相反,这不需要任何代码更改。 – IInspectable

回答

2

为了真正接近您正在寻找的内容,您需要结合Visual Studio的两个功能:数据断点和跟踪点。只要内存中的存储值发生更改,数据断点就可以通知调试器。要设置数据断点,启动调试器,并选择调试新建断点数据断点...

New Data Breakpoint

由于我们感兴趣的变量myValue,我们地址设置为&myValue,并设置大小为4个字节(因为这是一个int就是在Windows上):

Data Breakpoint Settings

现在,这已经很酷了。但对于非侵入性的记录,我们将设置操作还有:

Data Breakpoint Actions

重要的设置是日志消息([MYSIG]是任意的签名,这样有趣的日志条目以后可以过滤),转储变量的值,以及继续执行复选框。后者使得这种非侵入性(或低侵入性;记录大量信息对运行时性能有明显影响)。

随着到位,运行该代码

inline void DataTracepoint() { 
    volatile int myValue{ 0 }; 
    for (int i = 0; i < 10; ++i) { 
     myValue = i; 
    } 
} 

产生在调试输出窗格中的下列输出:

[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 

该输出然后可以很容易地在分析你最喜欢的文字处理器

+0

@RaquelRedondo:[我应该怎么做当有人回答我的问题?](http://stackoverflow.com/help/someone-answers) – IInspectable

相关问题