WinDbg sosex не может отладить

Я пытаюсь отлаживать управляемый код. .exe файл создан для x64

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DebugTutorial
{
    class Program
    {
        public static void Foo2()
        {
            Console.WriteLine("Foo2");
        }

        public static void Foo1()
        {
            Console.WriteLine("Foo1");
        }

        public static void Parent()
        {
            Foo1();
            Console.WriteLine("Parent");
        }

        static void Main(string[] args)
        {
            Foo1();
            Foo2();
            Parent();
        }
    }
}

Я делаю следующие команды:

0:000> .load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
0:000> .load C:\Users\Anton\Downloads\sosex_64\sosex.dll
0:000> .symfix
0:000> .reload /f
Reloading current modules
.*** WARNING: Unable to verify checksum for DebugTutorial.exe
....
0:000> lm
start             end                 module name
00000252`916b0000 00000252`916b6000   DebugTutorial C (pdb symbols)          C:\ProgramData\dbg\sym\DebugTutorial.pdb\B430DC1915A0462AB2D21E18458D70E71\DebugTutorial.pdb
00007ffb`233a0000 00007ffb`23404000   MSCOREE    (pdb symbols)          C:\ProgramData\dbg\sym\mscoree.pdb\02E66277C518120A967A3BFBC1850C941\mscoree.pdb
00007ffb`30280000 00007ffb`304f3000   KERNELBASE   (pdb symbols)          C:\ProgramData\dbg\sym\kernelbase.pdb\CD6C76E6120253287103CD7E22CC0A5D1\kernelbase.pdb
00007ffb`32900000 00007ffb`329b1000   KERNEL32   (pdb symbols)          C:\ProgramData\dbg\sym\kernel32.pdb\CA130BEBF44E36EAC20C5E95752843F61\kernel32.pdb
00007ffb`33ca0000 00007ffb`33e81000   ntdll      (pdb symbols)          C:\ProgramData\dbg\sym\ntdll.pdb\95927C40B68E505CD22742795247114C1\ntdll.pdb
0:000> !mbp DebugTutorial Foo1
The CLR has not yet been initialized in the process.
Breakpoint resolution will be attempted when the CLR is initialized.
0:000> .load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
0:000> .reload /f
Reloading current modules
.*** WARNING: Unable to verify checksum for DebugTutorial.exe
....
0:000> !mbp DebugTutorial Foo1
The breakpoint could not be set because a breakpoint has already been specified for this source location.

Если я поставлю точку останова с помощью горячей клавиши F9, я увижу следующее

0:000> g
Unable to insert breakpoint 0 at 00000252`916b002e, Win32 error 0n998
    "Invalid access to memory location."
bp0 at 00000252`916b002e failed
WaitForEvent failed
ntdll!LdrpDoDebuggerBreak+0x31:
00007ffb`33d6c93d eb00            jmp     ntdll!LdrpDoDebuggerBreak+0x33 (00007ffb`33d6c93f)

Win32 error 0n998

Почему? Что происходит? Как отлаживать .net с помощью windbg?

У Этот есть несколько полезных вещей, которые стоит попробовать/обдумать.

Jeroen Mostert 03.05.2019 12:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

.load ...\clr.dll пытается загрузить .NET framework в качестве плагина для WinDbg. Это не сработает. Плагин .NET для WinDbg называется SOS, и вы обычно это делаете .loadby sos clr. Однако это не должно иметь большого значения для остальной части сеанса.

Во-первых, вы используете !mbp, который используется с исходным файлом и номером строки. Однако вы используете его с модулем и методом.

Во-вторых, даже для !mbm параметры DebugTutorial Foo1 неверны. Формат module!namespace.class.method. К счастью, вы можете использовать подстановочные знаки. Попробуйте !mbm *!*method

В-третьих, ИМХО, вы получаете лучшую обратную связь о том, работает ли ваша команда или нет, если .NET framework уже загружен и о джиттинге. Используйте sxe ld clrjit, чтобы добиться этого.

Итак, приступим:

ntdll!LdrpDoDebuggerBreak+0x30:
00007ffd`fe112cfc cc              int     3
0:000> sxe ld clrjit
0:000> *** Wait until .NET is loaded
0:000> g

(3bc4.33bc): Unknown exception - code 04242420 (first chance)
ModLoad: 00007ffd`d2530000 00007ffd`d265b000   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clrjit.dll
ntdll!NtMapViewOfSection+0x14:
00007ffd`fe0dfb94 c3              ret
0:000> .load E:\...\sosex.dll
0:000> !mbm *!*Foo1
0:000> !mbl
0 e : disable *!*FOO1 ILOffset=0: pass=1 oneshot=false thread=ANY
    SODebugMBP!DebugTutorial.Program.Foo1() (PENDING JIT)

0:000> g

Breakpoint: JIT notification received for method DebugTutorial.Program.Foo1() in AppDomain 0000028c1a58ea00.
Breakpoint set at DebugTutorial.Program.Foo1() in AppDomain 0000028c1a58ea00.
Breakpoint 2 hit
00007ffd`730804e8 90              nop
0:000> !clrstack
OS Thread Id: 0x13d4 (0)
        Child SP               IP Call Site
000000d4d8afeaa0 00007ffd730804e8 DebugTutorial.Program.Foo1() [C:\...\Program.cs @ 14]
000000d4d8afead0 00007ffd730804a2 DebugTutorial.Program.Main(System.String[]) [C:\...\Program.cs @ 26]
000000d4d8afed30 00007ffdd2666da3 [GCFrame: 000000d4d8afed30] 

Другие вопросы по теме