将调试会话的值从 watch window 保存到文件

Saving values of debug session from watch window to a file

我必须跟踪一些我想跟踪的事件来监视多线程应用程序的运行。为此,我定义了一个结构数组。每个元素是一个跟踪记录。

enum Event { start, stop, pause };
struct A
{
    Event e;
    int x, y, z;
};

main()
{
  A a[100];
}

还有一个将事件写入数组的函数。数组a可以在Visual Studio的watchwindow中显示,虽然不是所有struct成员都显示:

-       a               0x008ff4bc {{e=0xcccccccc x=0xcccccccc y=0xcccccccc ...}, {e=0xcccccccc x=0xcccccccc y=0xcccccccc ...}, ...}    A[0x00000064]
+       [0x00000000]    {e=0xcccccccc x=0xcccccccc y=0xcccccccc ...}    A
+       [0x00000001]    {e=0xcccccccc x=0xcccccccc y=0xcccccccc ...}    A
+       [0x00000002]    {e=0xcccccccc x=0xcccccccc y=0xcccccccc ...}    A

由于数组比较大,加上手表的限制,我想将整个数组内容导出到一个文件中。这可以通过向正在调试的代码添加文件导出功能来完成。但这并不方便,因为调试器只是在断点处,并不总是可以告诉应用程序 运行 导出函数。

如何导出包含所有个成员值的数组?是否可以选择使用 VS 命令 window 或可能立即 window 来创建包含数据的文本文件?

一定要一键导出吗?您可以 select 全部复制并粘贴到您的输出文件中。您可以从 Watch window 执行此操作,但是 ImmediateCommand windows.

的输出更清晰一些

您可以通过在 C:\Program Files (x86)\Microsoft Visual Studio19\Community\Common7\Packages\Debugger\Visualizers 中创建自定义可视化工具来美化格式(使用 您的 版本的 VS)。

它可能是这样的,例如:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="A">
    <DisplayString>({e}:{x},{y},{z})</DisplayString>
  </Type>
</AutoVisualizer>