我的理解是,在调试版本的崩溃转储中,您可以获得堆栈跟踪的行号,而在发布版本中则不会。为了尝试这一点,我创建了一个非常简单的应用程序来导致崩溃。
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]