Отладка дампов Linux

Эта статья относится к: ✔️ пакету SDK для .NET Core 3.0 и более поздних версий

Сбор дампов в Linux

Совет

Часто задаваемые вопросы о сборе дампов, анализе и других предостережениях см. в разделе "Дампы: вопросы и ответы".

Два рекомендуемых способа сбора дампов в Linux:

Анализ дампов в Linux

После сбора дампа его можно проанализировать с помощью dotnet-dump средства с dotnet-dump analyze помощью команды. Этот шаг анализа должен выполняться на компьютере с той же архитектурой и дистрибутивом Linux, что и среда, в которой был записан дамп. Это dotnet-dump средство поддерживает отображение сведений о коде .NET, но не полезно для понимания проблем с кодом для других языков, таких как C и C++.

Кроме того, LLDB можно использовать для анализа дампов в Linux, что позволяет анализировать управляемый и машинный код. LLDB использует расширение SOS для отладки управляемого кода. Средство dotnet-sos CLI можно использовать для установки SOS, в котором содержится много полезных команд для отладки управляемого кода. Чтобы проанализировать дампы .NET Core, для LLDB и SOS требуются следующие двоичные файлы .NET Core из среды, в которой был создан дамп.

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (узел, используемый для запуска приложения)

В большинстве случаев эти двоичные файлы можно скачать с помощью средства dotnet-symbol. Если необходимые двоичные файлы невозможно загрузить с помощью dotnet-symbol (например, если используется частная версия .NET Core, построенная на основе источника), может потребоваться скопировать перечисленные выше файлы из среды, в которой был создан дамп. Если файлы не расположены вместе с файлом дампа, можно использовать команду LLDB/SOS setclrpath <path>, чтобы задать путь, из которого они должны быть загружены, и setsymbolserver -directory <path>, чтобы задать путь для поиска файлов символов.

После того как необходимые файлы будут доступны, можно загрузить дамп в LLDB, указав узел dotnet в качестве исполняемого файла для отладки:

lldb --core <dump-file> <host-program>

В предыдущей команде <dump-file> используется путь к дампу для анализа и <host-program> является собственной программой, которая запустила приложение .NET Core. dotnet Обычно это двоичный файл, если приложение не является автономным, в этом случае это имя приложения без расширения .dll.

После запуска LLDB может потребоваться использовать команду setsymbolserver, чтобы указать правильное расположение символов (setsymbolserver -ms, чтобы использовать сервер символов корпорации Майкрософт, или setsymbolserver -directory <path> для указания локального пути). Чтобы загрузить собственные символы, выполните команду loadsymbols. На этом этапе можно использовать команды SOS для анализа дампа.

Примечание.

LLDB можно установить с помощью команды. sudo apt-get install lldb

Анализ дампов в Windows

Дампы, собранные с компьютера Linux, также можно анализировать на компьютере с Windows с помощью Visual Studio, Windbg или средства dotnet-dump . Visual Studio и Windbg могут анализировать собственный и управляемый код, а dotnet-dump анализирует только управляемый код.

Примечание.

Visual Studio версии 16.8 и более поздних версий позволяет открывать и анализировать дампы Linux, созданные в .NET Core 3.1.7 или более поздней версии.

  • Visual Studio — см. руководство по отладке дампа Visual Studio.
  • Windbg — вы можете отлаживать дампы Linux в windbg , используя те же инструкции , которые будут использоваться для отладки дампа в пользовательском режиме Windows. Используйте версию x64 windbg для дампов, собранных из среды Linux x64 или Arm64, и версию x86 для дампов, собранных из среды x86 Linux.
  • dotnet-dump — просмотр дампа с помощью команды анализа dotnet-dump. Используйте версию x64 dotnet-dump для дампов, собранных из среды Linux x64 или Arm64, и версии x86 для дампов, собранных из среды x86 Linux.

См. также