Я понимаю, что с дампом сбоя сборки debug вы можете получить номер строки трассировки стека, и этого не происходит с выпуском сборки. Чтобы попробовать это, я создал очень простое приложение, которое сбой.Получение номеров строк кода нарушения в debug vs release builds
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press any key to continue");
Console.ReadKey();
TestMe(null);
}
static void TestMe(MyClass c)
{
Console.WriteLine(c.Field);
}
}
class MyClass
{
public string Field { get; set; }
}
Я создал одну сборку отладки и одну сборку выпуска. Вызвали оба из них и навалили аварийную свалку через ADPlus. Ниже приведены трассировки стека для каждой сборки. Как вы можете видеть, я получаю номер строки в обеих сборках. Очевидно, что разница в том, что в релизе строят свой отчетный вызов метода TestMe. Любые идеи почему? Мне нужно добавить путь символов для применения PDB файлов в обоих случаях
Debug построить
0:000> !CLRStack
OS Thread Id: 0x2398 (0)
Child SP IP Call Site
001eee74 003400db ConsoleApplication1.Program.TestMe(ConsoleApplication1.MyClass)*** WARNING: Unable to verify checksum for ConsoleApplication1.exe
[c:\ConsoleApplication1\ConsoleApplication1\Program.cs @ 20]
001eee84 003400a5 ConsoleApplication1.Program.Main(System.String[]) [c:\ConsoleApplication1\ConsoleApplication1\Program.cs @ 14]
001ef0c8 6ccb21bb [GCFrame: 001ef0c8]
релиз построить
0:000> !CLRStack
OS Thread Id: 0x2e40 (0)
Child SP IP Call Site
003bf5f8 772af8c1 [GCFrame: 003bf5f8] Unknown
003bf3b4 002b0098 ConsoleApplication1.Program.Main(System.String[])*** WARNING: Unable to verify checksum for ConsoleApplication1.exe
[c:\ConsoleApplication1\ConsoleApplication1\Program.cs @ 14]
003bf5f8 6ccb21bb [GCFrame: 003bf5f8]
Возможный дубликат [Когда метод, подходящий для включения в CLR?] (Http://stackoverflow.com/questions/4660004/when-is-a-method-eligible-to-be-inlined-by -the-clr) –