如何通过“启动可执行文件”使用 WinDbg 调试 .NET Core 控制台应用程序?

问题描述 投票:0回答:1

我正在尝试使用 WinDbg 实时调试一个简单的 .NET Core 控制台应用程序(通过 WinDbg 中的“启动可执行文件”),但引发了有关“访问冲突”的异常。

环境信息:

  • 操作系统:Windows 10 22H2 19045.3448
  • .NET 运行时:.NET 7
  • 构建工具:Visual Studio 2022(64位)v17.7.4
  • 构建选项:调试、任何 CPU
  • 调试工具:WinDbg Preview 1.2308.2002.0

代码:

namespace Simplicity01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            TestDebugging01();
        }

        static void TestDebugging01()
        { 
            T01 t01 = new T01();
            t01.Print();
        }
    }

    internal class T01 
    {
        public void Print()
        {
            int i = 3;
            string str = "abc";
            Console.WriteLine(i);
            Console.WriteLine(str); 
        }
    }
}

输入的调试命令步骤顺序如下:

  • 打开WinDbg并单击“启动可执行文件”以加载Simplicity01.exe文件。

    sxe ld:简单01 G !bpmd Simplicity01 Simplicity01.Program.TestDebugging01 G

以下是 WinDbg 中的步骤详细信息:

************* Preparing the environment for Debugger Extensions Gallery repositories **************
   ExtensionRepository : Implicit
   UseExperimentalFeatureForNugetShare : false
   AllowNugetExeUpdate : false
   AllowNugetMSCredentialProviderInstall : false
   AllowParallelInitializationOfLocalRepositories : true

   -- Configuring repositories
      ----> Repository : LocalInstalled, Enabled: true
      ----> Repository : UserExtensions, Enabled: true

>>>>>>>>>>>>> Preparing the environment for Debugger Extensions Gallery repositories completed, duration 0.000 seconds

************* Waiting for Debugger Extensions Gallery to Initialize **************

>>>>>>>>>>>>> Waiting for Debugger Extensions Gallery to Initialize completed, duration 0.031 seconds
   ----> Repository : UserExtensions, Enabled: true, Packages count: 0
   ----> Repository : LocalInstalled, Enabled: true, Packages count: 36

Microsoft (R) Windows Debugger Version 10.0.25921.1001 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: F:\Debug\Simplicity01.exe

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       cache*F:\Project\Symbol\Windbg
Deferred                                       srv*F:\Project\Symbol\Windbg*https://msdl.microsoft.com/download/symbols
Symbol search path is: cache*F:\Project\Symbol\Windbg;srv*F:\Project\Symbol\Windbg*https://msdl.microsoft.com/download/symbols
Executable search path is: 
ModLoad: 00007ff7`e82d0000 00007ff7`e82fb000   apphost.exe
ModLoad: 00007fff`86a90000 00007fff`86c88000   ntdll.dll
ModLoad: 00007fff`85a30000 00007fff`85aed000   C:\Windows\System32\KERNEL32.DLL
ModLoad: 00007fff`84290000 00007fff`84586000   C:\Windows\System32\KERNELBASE.dll
ModLoad: 00007fff`81930000 00007fff`819c1000   C:\Windows\SYSTEM32\apphelp.dll
ModLoad: 00007fff`84d00000 00007fff`84e9e000   C:\Windows\System32\USER32.dll
ModLoad: 00007fff`84ac0000 00007fff`84ae2000   C:\Windows\System32\win32u.dll
ModLoad: 00007fff`86420000 00007fff`8644c000   C:\Windows\System32\GDI32.dll
ModLoad: 00007fff`848a0000 00007fff`849ba000   C:\Windows\System32\gdi32full.dll
ModLoad: 00007fff`845e0000 00007fff`8467d000   C:\Windows\System32\msvcp_win.dll
ModLoad: 00007fff`849c0000 00007fff`84ac0000   C:\Windows\System32\ucrtbase.dll
ModLoad: 00007fff`85af0000 00007fff`86235000   C:\Windows\System32\SHELL32.dll
ModLoad: 00007fff`866a0000 00007fff`8674e000   C:\Windows\System32\ADVAPI32.dll
ModLoad: 00007fff`84ea0000 00007fff`84f3e000   C:\Windows\System32\msvcrt.dll
ModLoad: 00007fff`86530000 00007fff`865cc000   C:\Windows\System32\sechost.dll
ModLoad: 00007fff`86750000 00007fff`86876000   C:\Windows\System32\RPCRT4.dll
(5070.5034): Break instruction exception - code 80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00007fff`86b60750 cc              int     3
0:000> sxe ld:Simplicity01
0:000> g
ModLoad: 00007fff`84b10000 00007fff`84b40000   C:\Windows\System32\IMM32.DLL
ModLoad: 00007fff`71920000 00007fff`71982000   C:\Program Files\dotnet\host\fxr\7.0.11\hostfxr.dll
ModLoad: 00007fff`059a0000 00007fff`05a03000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\hostpolicy.dll
ModLoad: 00007ffe`b25b0000 00007ffe`b2aaa000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\coreclr.dll
ModLoad: 00007fff`84fd0000 00007fff`850fa000   C:\Windows\System32\ole32.dll
ModLoad: 00007fff`85660000 00007fff`859b4000   C:\Windows\System32\combase.dll
ModLoad: 00007fff`862a0000 00007fff`8636d000   C:\Windows\System32\OLEAUT32.dll
ModLoad: 00007fff`84810000 00007fff`84892000   C:\Windows\System32\bcryptPrimitives.dll
(5070.5034): Unknown exception - code 04242420 (first chance)
ModLoad: 00007ffe`b15d0000 00007ffe`b20eb000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\System.Private.CoreLib.dll
ModLoad: 00007ffe`b1450000 00007ffe`b15cb000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\clrjit.dll
ModLoad: 00007fff`82000000 00007fff`82012000   C:\Windows\SYSTEM32\kernel.appcore.dll
ModLoad: 000001f9`3d350000 000001f9`3d358000   F:\Debug\Simplicity01.dll
ntdll!NtMapViewOfSection+0x14:
00007fff`86b2d354 c3              ret
0:000> !bpmd Simplicity01 Simplicity01.Program.TestDebugging01
Adding pending breakpoints...
0:000> g
(5070.5034): CLR notification exception - code e0444143 (first chance)
ModLoad: 000001f9`3ed50000 000001f9`3ed5e000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\System.Runtime.dll
(5070.5034): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007ffe`b5500000 00007ffe`b552a000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\System.Console.dll
(5070.5034): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007fff`2bb90000 00007fff`2bba3000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\System.Threading.dll
(5070.5034): CLR notification exception - code e0444143 (first chance)
ModLoad: 000001f9`3d3d0000 000001f9`3d3d8000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\System.Text.Encoding.Extensions.dll
(5070.5034): CLR notification exception - code e0444143 (first chance)
ModLoad: 00007fff`541f0000 00007fff`541fd000   C:\Program Files\dotnet\shared\Microsoft.NETCore.App\7.0.11\System.Runtime.InteropServices.dll
(5070.5034): CLR notification exception - code e0444143 (first chance)
(5070.5034): CLR notification exception - code e0444143 (first chance)
JITTED Simplicity01!Simplicity01.Program.TestDebugging01()
Setting breakpoint: bp 00007FFE52C10B00 [Simplicity01.Program.TestDebugging01()]
Breakpoint 0 hit
Simplicity01!COM+_Entry_Point:
00007ffe`52c10b00 55              push    rbp
0:000> g
(5070.5034): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
00007ffe`52c10b60 0000            add     byte ptr [rax],al ds:00007ffe`52d445b8=ff

现在,执行“a”命令后会抛出“访问冲突”异常。

我不知道为什么在调试时会导致这个“访问冲突”异常。

我该如何解决这个问题?

.net-core console-application windbg
1个回答
0
投票

做了一些小调查并在X/twitter上询问,似乎这个问题与.NET 7中引入的W^X(写入和执行)设置有关(或者可能只是.NET7中的默认值发生了变化) 。新值对于调试器和分析相关工具来说是有问题的。

您可以通过使用

DOTNET_EnableWriteXorExecute
将环境变量
0
设置为
setx DOTNET_EnableWriteXorExecute 0
来控制它。设置该值后,该场景就会通过。

知道标志名称后,搜索会显示一些项目(如 Benchmark.NET here)覆盖此值以避免此新默认值为其生成的问题。

有一个未解决的问题可以解决

bpmd
命令的此问题。

© www.soinside.com 2019 - 2024. All rights reserved.