получение номеров строк нарушающего кода в сборках отладки и выпуска - PullRequest
3 голосов
/ 03 января 2012

Насколько я понимаю, с помощью аварийного дампа отладочной сборки вы можете получить номер строки трассировки стека, чего не происходит при выпуске сборки. Чтобы попробовать это, я создал очень простое приложение, которое вылетает.

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]   

1 Ответ

2 голосов
/ 03 января 2012

В сборке релиза JIT-компилятор, без сомнения, встроен в вызов метода - поэтому номер строки отличается.

...