Насколько я понимаю, с помощью аварийного дампа отладочной сборки вы можете получить номер строки трассировки стека, чего не происходит при выпуске сборки. Чтобы попробовать это, я создал очень простое приложение, которое вылетает.
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 приложения в обоих случаях
Отладочная сборка
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]