c++ - Visual Studio 。调试。如何将变量在运行期间拥有的所有值保存到文件中?

标签 c++ visual-studio debugging variables

我正在观察一个变量,该变量在单次运行期间被分配了数千个值。它被设置了多次,并且仅通过在重新分配的位置设置断点很难跟踪代码工作流程。 有没有办法将变量的所有值输出到 .txt 文件?我想在不修改实际 C++ 代码的情况下实现这一点,只需使用调试工具。

最佳答案

为了真正接近您正在寻找的内容,您需要结合 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;
    }
}

调试输出 Pane 中生成以下输出:

[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

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

关于c++ - Visual Studio 。调试。如何将变量在运行期间拥有的所有值保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39789974/

相关文章:

c++ - 在 Visual Studio 2008 的源代码中指定已编译二进制文件 (*.exe) 的名称

c++ - Qt 调试器与 OpenCV 卡住

c++ - 对 `gluOrtho2D' 的 undefined reference

c# - 为什么 C++ msgpack-c 在数字 10 (0x0A) 之前添加数字 13 (0x0D),而 C# MessagePack-CSharp 没有?

c++ - 标准是否要求 std::tuple_size 对 SFINAE 友好?

c# - 如何在用户未处理异常类型时打开中断?

c# - 我可以在没有 Visual Studio .net 的情况下用 C# 创建 Web 服务吗

c++ - 有没有办法在 QScriptEngine#pushContext/popContext 之外维护 Qt 脚本上下文环境?

python - 从 Pycharm 调试机器人框架测试

asp.net - 安装IE8后,为什么不能从Visual Studio 2005调试?