WedX - журнал о программировании и компьютерных науках

C# Как сбросить все переменные и текущие значения во время выполнения

Существуют ли какие-либо встроенные или сторонние библиотеки, которые позволяют вам просто сбрасывать все переменные в память во время выполнения? Я хотел бы иметь возможность просматривать переменные и текущие значения аналогично их просмотру, нажимая точку останова и зависая над переменными, но без фактической остановки выполнения программы (т.е. просто получения снимка). Было бы хорошо, если бы он мог выгружать их в файл, который затем можно было бы открыть позже в программе, чтобы получить хороший графический интерфейс для их просмотра, но простого дампа текстового файла было бы достаточно.

12.10.2009

  • Я думаю, что этот вопрос очень общий и стал бы частью супер-отладчика, если бы существовал ответ, поэтому я открыл для него награду. Представьте, если бы список переменных можно было фильтровать на лету, а также отображать использование памяти (можно мечтать). 11.11.2012
  • Нет, я имел в виду «супер», потому что это было бы лучше, чем то, что мы на самом деле имеем в настоящее время с C #. 11.11.2012
  • Это совершенно просто сделать в Linux, почему это совершенно невозможно в Windows? 10.03.2017

Ответы:


1

Я не могу придумать простой способ сделать это в общем виде. Что может сработать, так это программно создать файл дампа вашего запущенного процесса. Вы можете сделать это с помощью P/Invoke для dbghelp.dll или создать процесс cdb.exe для создания файл дампа. Получив файл, вы можете открыть его в отладчике для последующего анализа с помощью SOS. .dll с помощью cdb.exe/windbg.exe или даже написать скрипт отладчика для создания дампа данные, которые вы хотите (в основном) автоматически.

12.10.2009

2

Я считаю, что какая-то структура ведения журнала поможет вам сделать это...

Проверить:

https://www.dotnetlogging.com/

На моем рабочем месте мы используем log4net, который нам очень подходит.

Так почему же вы хотите выгрузить все переменные для последующего анализа? Думали ли вы о том, чтобы сначала написать тест кода, чтобы снизить зависимость от отладчика и иметь набор автоматических тестов, проверяющих значения для вас?

12.10.2009
  • Да, я уже использую ведение журнала, аналогичное log4net. Однако я хотел большего, чем универсальный дамп переменных, чтобы мне не приходилось писать специальный код для вывода переменных в регистратор для каждой программы. Также было бы неплохо иметь средство просмотра снимка с графическим интерфейсом, чтобы сложные структуры классов легко читались. 12.10.2009
  • Я хочу сбросить переменные для душевного спокойствия в основном. Я уверен в программе, но просто хочу убедиться, что все идет нормально. Чрезвычайно сложно писать подробные тесты для той работы, которую я делаю, и даже в этом случае вы можете писать тесты только для ситуаций, которые можете придумать. Он также мог бы формироваться как низкоуровневый способ увидеть, в каком состоянии находится программа в любой момент времени. 13.10.2009

  • 3

    Раньше я использовал профайлер YourKit .Net для профилирования приложений .Net.

    Хотя я когда-либо использовал его только для личного подключения к работающим приложениям, документация по моментальным снимкам заявляет, что у них есть Profiler API, который можно использовать для программно создавать снэпшоты для последующего просмотра.

    С точки зрения кода это выглядит так же просто, как следующее:

    Controller c = new Controller();
    String snapshotPath = c.CaptureSnapshot();
    

    Я считаю, что вы можете позже загрузить файлы моментальных снимков в графический интерфейс YourKit, чтобы просмотреть их.

    Я не удивлюсь, если некоторые другие популярные профилировщики, такие как JetBrains dotTrace Performance и RedGates ANTS Performance Profiler имеют похожие программные API, но мне не удалось быстро найти очевидная документация на их веб-сайтах (и я не хотел смотреть их вебинары, чтобы узнать, существует ли эта функция!)

    13.11.2012
  • Возможно, вам следует упомянуть, что YourKit стоит денег. WMemoryProfiler является бесплатным и открытым исходным кодом. Я также не нашел на веб-страницах коммерческих профилировщиков, кроме Yourkit, программных снимков памяти Api. У других есть только Apis для моментальных снимков профилировщика производительности. Если бы эта функция существовала, я уверен, что маркетологи разместили бы ее на своей веб-странице. 18.11.2012

  • 4

    Для этого вы можете использовать WMemoryProfiler для

    • Получить все объекты во всех доменах приложений в виде массива объектов
    • Создайте дамп памяти вашего собственного процесса
    • Сериализировать определенные объекты на диск

    Чтобы это произошло, вам, конечно, нужен Windbg, но API WMemoryProfiler полностью управляем, и вы можете в основном самостоятельно отлаживать свой процесс. Библиотека позаботится об обычных странностях отладчика, поскольку она оборачивает Windbg в хорошую доступную библиотеку.

    В приведенном ниже коде все экземпляры объектов System.Threading.Thread помещаются в массив объектов. Таким образом, вы можете написать визуализатор для ваших собственных объектов приложения во время выполнения. Другая перегрузка просто дает вам все объекты во всех доменах приложений.

    using (var debugger = new MdbEng())
    {
      var dummy = new Thread(() => {});
      dummy.Name = "Dummy Thread";
    
      // Get all thread objects in all AppDomains
      var threads = debugger.GetObjects("System.Threading.Thread", true);
    
      foreach (Thread t in threads)
      {
        Console.WriteLine("Managed thread {0} has Name {1}", t.ManagedThreadId, t.Name);
      }
      GC.KeepAlive(dummy);
    }
    

    Поскольку это оболочка вокруг Windbg, вы также можете создавать дамп памяти на лету, а затем загружать дамп памяти из вашего процесса, чтобы извлечь данные объекта для визуализации из дампа. Коммерческие профилировщики памяти (например, MemoryProfiler от Scitech) используют эту технику уже много лет, но она довольно медленная, когда у вас огромный дамп памяти, поскольку они также используют Windbg в качестве анализатора дампа.

    17.11.2012

    5

    Вы можете попробовать инструмент Intellitrace, поставляемый с окончательной версией Visual Studio. Это то, что вы описываете - оно записывает то, что происходит в вашем приложении, и позволяет вам отлаживать его, не выполняя вашу программу с наведением курсора на переменные и всеми другими окнами отладки, чтобы помочь вам.

    13.11.2012

    6

    Вы можете использовать PostSharp. Я нашел очень полезным записывать время отладки, потому что приложение среды было развернуто. И инструментировал/записывал много вещей.

    Но, очевидно, вам нужно будет указать все переменные, которые вам нужно записать.

    Подробнее см. здесь.

    14.11.2012
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

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


    Для любых предложений по сайту: [email protected]