Скопировать значения объектов в режиме отладки 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, как сериализовать объект из отладчика
Ответ 3
Существует последнее расширение Object Exporter, которое делает это удобно.
http://www.omarelabd.net/exporting-objects-from-the-visual-studio-debugger/
Расширение: https://visualstudiogallery.msdn.microsoft.com/c6a21c68-f815-4895-999f-cd0885d8774f
Ответ 4
Не совсем то, о чем вы спрашиваете, но можете добавить часы для этого объекта, а в окне просмотра разверните и выберите все, что вы хотите скопировать, а затем скопируйте.
Ответ 5
Используя атрибуты чтобы украсить ваши классы и методы, вы можете получить определенное значение на дисплее объекта во время отладки с помощью атрибут DebuggerDisplay, например
[DebuggerDisplay("Person - {Name} is {Age} years old")]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Ответ 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, который откроет окно просмотра, которое состоит из всех значений. Я выделил все и вставил в текстовый редактор, вот и все.