如何在 Visual Studio 2015 C++ 项目调试期间将变量值更改记录到 CSV 文件?

How to log variable value changes to a CSV file during debug in Visual Studio 2015 C++ Project?

我正在使用遗留 C++ 代码开发 war 游戏项目。 "extreme cases" 中的攻击似乎运作异常(例如,一场比赛 "tile" 中的一场战斗向一组 3 个团发射了 5000 支箭,其中一个团可以成为任何 ~ 5000 潜力 "hits" 在一个游戏回合的过程中)。我的任务是整理游戏回合中发生的事情的数据。

我需要记录一个特定局部变量的值在一个游戏回合中对于任何受到攻击的单位的变化情况(限制为 'test scenario' 其中只有一个方块中的团受到攻击攻击)。

我的 Visual Studio "Watch window" 在调试会话开始时看起来像这样:

Name----------------------Value------------Type
targ-----------------------011-------------short
(gUnit[011]).damage--------0---------------short
(gUnit[047]).damage--------0---------------short
(gUnit[256]).damage--------0---------------short

这意味着:在第一个断点处,嵌套数组 gUnit[011]) 中表示的团已被确定为 "hit" 的目标 ("targ") 和 "damage" 该团在此命中前 = 0.

一个循环后可能会变成这样:

Name----------------------Value------------Type
targ-----------------------256-------------short
(gUnit[011]).damage--------3---------------short
(gUnit[047]).damage--------0---------------short
(gUnit[256]).damage--------0---------------short

也就是说:011团在"hit"受到了3次伤害后,现在确定下一次命中的目标是047团。因此对于调用循环的每个周期,任何潜在目标都可以重新分配为目标,并且 'damage' 的值可以更改。对于这个发射 5000 支箭的示例,可能有 5000 次命中(尽管发射那么多箭不太可能超过 1300 次命中)。对于一个游戏回合中发生的每次命中,我需要记录: 目标和伤害

我设置了断点,我可以手动做我需要做的事情,意思是:

  1. 前进到第一次调用确定命中的函数["MissileHit()"]

  2. 再次前进并注意 (gUnit[011]).damage 的值已从 0 更改为 3。/* 即 ID 为“011”的军团受到了“3”伤害. . . */

  3. 对实验一重复 5000 次(并注意,每个循环 targ 可以更改为代表图块中受到攻击的单位的三个数组中的任何一个。

  4. 为测试的第一阶段重复另外 7 个实验(条件略有不同)。

  5. 重复大概 3 或 4 个以上的测试阶段。 . .

总而言之,至少有两列的数千行: targ.......伤害

(作为旁注,此 csv 将在每个测试周期后插入额外的列,因此最终电子表格看起来更像这样: atkrID....地形....atkrExpr....atkrFatig....targID....targDamage

所有这些数据收集的最终结果是:可以根据调节攻击结果的各种游戏内变量计算描述性统计数据)

显然,这样做 "manually" 会很荒谬。

有没有一种简单的方法可以让 Visual Studio 生成 csv 文件来为我记录这些数据?

当这些断点执行时,我当然可以继续编写脚本到 运行,然后将内容流式传输到文件中。但是,我仍然不知所措(使用 Visual Studio、C++ 和一般开发!)所以,我认为值得一问 Visual Studio 是否有内置功能可以促进这一点.

我认为像 Drop 的评论这样的 VS 扩展会是解决这个问题的更好途径,但我认为它需要高扩展知识,所以我只提供另一个解决这个问题的方法:添加数据断点并输出值到输出windows,即使你也需要将值复制并粘贴到你的文件中,但我认为这也方便你在调试时分析该值。