Сохранение значений сеанса отладки из окна просмотра в файл - PullRequest
0 голосов
/ 23 января 2020

Мне нужно отследить некоторые события, которые я хочу отследить, чтобы отслеживать работу многопоточного приложения. Для этого я определил массив структур. Каждый элемент представляет собой одну запись трассировки.

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

main()
{
  A a[100];
}

Существует также функция, которая записывает событие в массив. Массив a может отображаться в окне просмотра Visual Studio, хотя отображаются не все члены структуры:

-       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

Поскольку массив довольно большой, и для ограничения часов требуется экспортировать весь массив содержимого в файл. Это можно сделать, добавив функцию экспорта файла в код, который отлаживается. Но это не удобно, так как отладчик находится только в точке останова, и не всегда можно указать приложению запустить функцию экспорта.

Как экспортировать массив со значениями all участников? Есть ли возможность использовать командное окно VS или, возможно, непосредственное окно для создания текстового файла с данными?

1 Ответ

0 голосов
/ 23 января 2020

Должен ли это быть экспорт в один клик? Вы можете выбрать все, скопировать и вставить в ваш выходной файл. Вы можете сделать это из окна Watch, но вывод будет немного более четким из Immediate или Command windows.

Формат можно украсить, создав пользовательский визуализатор в * 1006. * (используйте вашу версию 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>
...