Поделиться через


Отладка дампов 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, созданная из исходного кода), может потребоваться скопировать файлы, перечисленные выше, из среды, в которой был создан дамп. Если файлы не находятся рядом с файлом дампа, вы можете использовать команду setclrpath <path> LLDB/SOS, чтобы задать путь, из которого их следует загружать, и команду 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 analyze. Используйте версию x64 dotnet-dump для дампов, собранных из среды Linux x64 или Arm64, и версии x86 для дампов, собранных из среды x86 Linux.

См. также