Скопировать значения объектов в режиме отладки Visual Studio

В режиме отладки Visual Studio можно навести курсор на переменные, чтобы показать их значение, а затем щелкнуть правой кнопкой мыши на "Копировать", "Копировать выражение" или "Копировать значение".

Если переменная является объектом, а не только базовым типом, есть знак + для расширения и изучения объекта. Есть ли способ скопировать все это в буфер обмена?

Ответ 1

В ближайшем окне введите

?name_of_variable

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

UPDATE: Я предполагаю, что вы спрашивали, как копировать/вставлять вложенную структуру значений, чтобы вы могли либо искать ее по тексту, либо чтобы вы могли сохранить ее на стороне, а затем сравнить состояние объекта с ней. Если я прав, вы можете проверить коммерческое расширение Visual Studio, которое я создал, называемое OzCode, которое позволяет вам делать это гораздо легче с помощью функций "Поиск" и "Сравнить".

ОБНОВЛЕНИЕ 2 Чтобы ответить на вопрос @ppumkin, или новый EAP имеет новую функцию экспорта, позволяет пользователям экспортировать значения переменных в код Json, XML, Excel или С#.

Полное раскрытие: я являюсь соавтором инструмента, который я описал здесь.

Ответ 2

Вы можете запустить ниже код в непосредственном окне и экспортировать в XML файл сериализованное XML-представление объекта:

(new System.Xml.Serialization.XmlSerializer(obj.GetType())).Serialize(new System.IO.StreamWriter(@"c:\temp\text.xml"), obj)

Источник: Visual Studio, как сериализовать объект из отладчика

Ответ 4

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

Ответ 6

Google привел меня к этому 8-летнему вопросу, и я в конечном итоге использовал ObjectDumper для достижения чего-то очень похожего на копирование данных отладчика. Это был легкий ветерок.

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

Ответ 7

Я всегда использую:

string myJsonString = JsonConvert.SerializeObject(<some object>);

Затем я копирую строковое значение, которое, к сожалению, также копирует обратные косые черты.

Чтобы удалить зазоры, перейдите сюда: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_replace

Затем в элементе <p id="demo">Visit Microsoft!</p> замените текст на скопированный текст. затем замените var res = str.replace("Microsoft", "W3Schools"); линия с

var res = str.replace(/\\/g, '')

Запустите эти новые изменения, но не забудьте нажать кнопку "попробуйте" справа.

Теперь у вас должен быть весь текст объекта в формате json, который вы можете удалить в json formatter, например http://jsonformatter.org или создать POCO, который вы теперь можете использовать http://json2csharp.com/

Ответ 8

Я знаю, что немного опоздал на вечеринку, но я написал реализацию JSON для сериализации объекта, если вы предпочитаете выводить JSON. Использует ссылку Newtonsoft.Json.

private static void WriteDebugJSON (dynamic obj, string filePath)
{
    using (StreamWriter d = new StreamWriter(filePath))
    {
        d.Write(JsonConvert.SerializeObject(obj));
    }
}

Ответ 9

Самый популярный ответ от fooobar.com/questions/71268/...:

Если повезет, у вас уже есть Json.Net в вашем домене приложений. В этом случае вставьте это в ваше окно Immediate:

Newtonsoft.Json.JsonConvert.SerializeObject(someVariable)

Ответ 10

если у вас есть список, и вы хотите найти определенную переменную: В ближайшем окне введите

 myList.Any(s => s.ID == 5062);

если это возвращает true

var myDebugVar = myList.FirstOrDefault(s => s.ID == 5062);
?myDebugVar

Ответ 11

Я только что щелкнул правой кнопкой мыши по переменной и выбрал AddWatch, который откроет окно просмотра, которое состоит из всех значений. Я выделил все и вставил в текстовый редактор, вот и все.