Почему моя точка останова не срабатывает при использовании !bpmd в Windbg с SOS и .Net Core 3.1?

#c# #.net-core #windbg #sos #coreclr

#c# #.net-core #windbg #sos #coreclr

Вопрос:

Недавно я узнал о процессе отладки управляемого кода в Windbg с помощью sos. Я просмотрел множество примеров, и из того, что я видел, это должно сработать. Но это не так. Это приложение .net core 3.1.

Я просто пытаюсь проникнуть внутрь очень простого основного метода, приведенного ниже.

 namespace ConsoleAppTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello Console App!");
            ThisPrints();
        }

        static void ThisPrints()
        {
            Console.WriteLine("This is a message");
        }
    }
}
 

Мой процесс приведен ниже

  1. Прикрепить к ConsoleAppTest.exe в Windbg
  2. Выполнить sxe ld clrjit
  3. g Эти шаги приводят к следующему результату:
 0:000> g
ModLoad: 00007ffe`a0900000 00007ffe`a0930000   C:WindowsSystem32IMM32.DLL
ModLoad: 00007ffe`7df70000 00007ffe`7e004000   C:Program Filesdotnethostfxr3.1.8hostfxr.dll
ModLoad: 00007ffe`64ef0000 00007ffe`64f82000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8hostpolicy.dll
ModLoad: 00007ffe`3c600000 00007ffe`3cb6f000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8coreclr.dll
ModLoad: 00007ffe`9fbb0000 00007ffe`9fcda000   C:WindowsSystem32ole32.dll
ModLoad: 00007ffe`9f690000 00007ffe`9f9e5000   C:WindowsSystem32combase.dll
ModLoad: 00007ffe`a0830000 00007ffe`a08fd000   C:WindowsSystem32OLEAUT32.dll
ModLoad: 00007ffe`9edb0000 00007ffe`9ee05000   C:WindowsSystem32SHLWAPI.dll
ModLoad: 00007ffe`9e840000 00007ffe`9e867000   C:WindowsSystem32bcrypt.dll
(5b4.40e8): Unknown exception - code 04242420 (first chance)
ModLoad: 00007ffe`32430000 00007ffe`32d4d000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8System.Private.CoreLib.dll
ModLoad: 00007ffe`9c000000 00007ffe`9c012000   C:WindowsSYSTEM32kernel.appcore.dll
ModLoad: 00007ffe`9e520000 00007ffe`9e59f000   C:WindowsSystem32bcryptPrimitives.dll
ModLoad: 00007ffe`4ad30000 00007ffe`4ae72000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8clrjit.dll
ntdll!NtMapViewOfSection 0x14:
00007ffe`a0a0c2a4 c3              ret
 
  1. Затем я выполняю !bpmd ConsoleAppTest Program.Main
  2. g

Проблема возникает после шага 5, хотя clrjit.dll загружается, точка останова не достигнута после ее установки на шаге 4. и я получаю этот конечный результат:

 0:000> !bpmd ConsoleAppTest Program.Main
Adding pending breakpoints...
0:000> g
ModLoad: 00000221`90e50000 00000221`90e58000   C:UsersBarucsourcereposConsoleAppTestConsoleAppTestbinReleasenetcoreapp3.1ConsoleAppTest.dll
(5b4.40e8): CLR notification exception - code e0444143 (first chance)
Failed to set code notification
ModLoad: 00007ffe`98f60000 00007ffe`98f6e000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8System.Runtime.dll
(5b4.40e8): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007ffe`7d360000 00007ffe`7d385000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8System.Console.dll
(5b4.40e8): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007ffe`82050000 00007ffe`82063000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8System.Threading.dll
(5b4.40e8): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007ffe`72720000 00007ffe`72753000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8System.Runtime.Extensions.dll
(5b4.40e8): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007ffe`822b0000 00007ffe`822b3000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.8System.Text.Encoding.Extensions.dll
(5b4.40e8): CLR notification exception - code e0444143 (first chance)
ntdll!NtFsControlFile 0x14:
00007ffe`a0a0c4c4 c3              ret
 

Любые рекомендации будут высоко оценены. Спасибо!

Комментарии:

1. Я могу воспроизвести это, но у меня нет ответа. Я не очень разбираюсь в отладке .NET Core. Надеюсь, что вознаграждение поможет.

Ответ №1:

Проблема может быть решена путем явной загрузки правильной версии sos.dll . Это должно соответствовать версии среды выполнения и разрядности вашей цели.

Имейте в виду, что, поскольку сейчас выпущен .NET 5.0, вы, скорее всего, получите версию .NET 5.0, если не укажете версию явно.

Это приведет к установке .NET 5.0 sos:

 dotnet tool install -g dotnet-sos
 

Это приведет к установке .NET 3.1 sos:

 dotnet tool install -g dotnet-sos --version 3.1.141901
 

Вам также необходимо явно загрузить sos (чтобы убедиться, что он соответствует вашей целевой версии .NET x86 / x64). Я не помню, какую версию sos (если таковая имеется) будет использовать windbg по умолчанию. (Вам нужно будет изменить пути, указанные ниже, чтобы отразить правильное имя пользователя):

 .load C:Users<username>.dotnettools.storedotnet-sos3.1.141901dotnet-sos3.1.141901toolsnetcoreapp2.1anywin-x64sos.dll
 

Полная трассировка:

 0:000> .load C:Users<username>.dotnettools.storedotnet-sos3.1.141901dotnet-sos3.1.141901toolsnetcoreapp2.1anywin-x64sos.dll

0:000> sxe ld clrjit
0:000> g
ModLoad: 00007ffd`ae750000 00007ffd`ae7ce000   C:Program Filesdotnethostfxr5.0.1hostfxr.dll
ModLoad: 00007ffd`ddaf0000 00007ffd`ddb93000   C:WindowsSystem32ADVAPI32.dll
ModLoad: 00007ffd`dca30000 00007ffd`dcace000   C:WindowsSystem32msvcrt.dll
ModLoad: 00007ffd`ddd80000 00007ffd`dde1e000   C:WindowsSystem32sechost.dll
ModLoad: 00007ffd`ddba0000 00007ffd`ddcc2000   C:WindowsSystem32RPCRT4.dll
ModLoad: 00007ffd`ab5b0000 00007ffd`ab642000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.10hostpolicy.dll
ModLoad: 00007ffd`919d0000 00007ffd`91f3f000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.10coreclr.dll
ModLoad: 00007ffd`dc770000 00007ffd`dc8c6000   C:WindowsSystem32ole32.dll
ModLoad: 00007ffd`dcc40000 00007ffd`dcf6d000   C:WindowsSystem32combase.dll
ModLoad: 00007ffd`db760000 00007ffd`db7de000   C:WindowsSystem32bcryptPrimitives.dll
ModLoad: 00007ffd`dd250000 00007ffd`dd279000   C:WindowsSystem32GDI32.dll
ModLoad: 00007ffd`dc3f0000 00007ffd`dc58c000   C:WindowsSystem32gdi32full.dll
ModLoad: 00007ffd`db8e0000 00007ffd`db980000   C:WindowsSystem32msvcp_win.dll
ModLoad: 00007ffd`dd950000 00007ffd`ddae7000   C:WindowsSystem32USER32.dll
ModLoad: 00007ffd`db740000 00007ffd`db760000   C:WindowsSystem32win32u.dll
ModLoad: 00007ffd`dd2e0000 00007ffd`dd3a4000   C:WindowsSystem32OLEAUT32.dll
ModLoad: 00007ffd`dd280000 00007ffd`dd2d2000   C:WindowsSystem32SHLWAPI.dll
ModLoad: 00007ffd`db4d0000 00007ffd`db4f6000   C:WindowsSystem32bcrypt.dll
ModLoad: 00007ffd`ddcd0000 00007ffd`ddcfe000   C:WindowsSystem32IMM32.DLL
(37ec.25dc): Unknown exception - code 04242420 (first chance)
ModLoad: 00007ffd`910b0000 00007ffd`919cd000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.10System.Private.CoreLib.dll
ModLoad: 00007ffd`db490000 00007ffd`db4a1000   C:WindowsSystem32kernel.appcore.dll
ModLoad: 00007ffd`a9b80000 00007ffd`a9cc2000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.10clrjit.dll
ntdll!NtMapViewOfSection 0x14:
00007ffd`df4bfc64 c3              ret

0:000> !bpmd ConsoleAppTest Program.Main
Adding pending breakpoints...
0:000> g
ModLoad: 00000179`2e410000 00000179`2e418000   C:Users<username>Documents!My StuffReposTest ProjectsConsoleAppTestConsoleAppTestbinDebugnetcoreapp3.1ConsoleAppTest.dll
(37ec.25dc): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007ffd`d08e0000 00007ffd`d08ee000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.10System.Runtime.dll
(37ec.25dc): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007ffd`c8d10000 00007ffd`c8d35000   C:Program FilesdotnetsharedMicrosoft.NETCore.App3.1.10System.Console.dll
(37ec.25dc): CLR notification exception - code e0444143 (first chance)
(37ec.25dc): CLR notification exception - code e0444143 (first chance)
JITTED ConsoleAppTest!ConsoleAppTest.Program.Main(System.String[])
Setting breakpoint: bp 00007FFD32010FB0 [ConsoleAppTest.Program.Main(System.String[])]
Breakpoint 0 hit
00007ffd`32010fb0 55              push    rbp
 

Комментарии:

1. Это было оно. Даже после переноса моего проекта на .Net 5 мне пришлось явно загрузить x64 sos.dll . Спасибо!

2. Вау. И я могу устанавливать только одну версию одновременно? .NET Core s****