Управляемый код отличается от собственного кода. Чтобы установить точки останова «собственным способом» (bp
), вам нужно подождать, пока метод не будет JIT-скомпилирован, а затем использовать собственный адрес метода.
Как правило, этого не делать, но используйте вместо этого NET конкретный c эквивалентов. Существует SOS (документы Microsoft) !bpmd
или SOSEX (вероятно, больше не поддерживается) !mbm
.
С учетом кода
using System;
namespace JittyProject
{
class Program
{
static void Main()
{
Console.WriteLine("You want to stop before this shows up.");
Console.ReadLine();
}
}
}
Вы хотите остановиться на начальной точке останова и сказать ей подождать до тех пор, пока не будет загружена NET, например,
0:000> sxe ld clr
0:000> g
После загрузки среды выполнения. NET вы можете загрузить расширение SOS для . NET Speci c Команды отладки.
0:000> .loadby sos clr
И расширение SOSEX:
0:000> .load c:\wherever\SOSEX.dll
А затем добавить точку останова:
0:000> !mbm JittyProject.Program.Main
Использование обычный g
, вы в конечном итоге достигнете точки останова:
0:000> g
ModLoad: 76650000 766e2000 C:\Windows\SysWOW64\OLEAUT32.dll
Breakpoint: JIT notification received for method JittyProject.Program.Main() in AppDomain 00960db0.
Breakpoint set at JittyProject.Program.Main() in AppDomain 00960db0.
Breakpoint 2 hit
0:000> !clrstack
OS Thread Id: 0x3ff8 (0)
Child SP IP Call Site
003eeda0 77601ffc [PrestubMethodFrame: 003eeda0] JittyProject.Program.Main() [C:\...\JittyProject\Program.cs @ 8]
003eef74 77601ffc [GCFrame: 003eef74]