c# - 在调试与发布版本中获取有问题代码的行号

标签 c# release windbg debug-symbols sos

我的理解是,通过调试版本的崩溃转储,您可以获得堆栈跟踪的行号,而发布版本不会发生这种情况。为了尝试这个,我创建了一个非常简单的应用程序,它会崩溃。

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 运行这两个和 catpured 故障转储。下面是每个构建的堆栈跟踪。如您所见,我在两个版本中都获得了行号。明显的区别在于,在发布版本中,它不报告对 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]   

最佳答案

在发布版本中,JIT 编译器无疑内联了方法调用 - 这就是行号不同的原因。

关于c# - 在调试与发布版本中获取有问题代码的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8717105/

相关文章:

ios - View Controller 在发布后收到发送给它的消息,导致崩溃

asp.net - ASP.NET文件编译调试="false"时生成PDB文件?

c# - 为什么 psscor4 命令不会运行

.net - 使用 sos 查看日期时间方法参数

c++ - 强制在 Visual Studio 2015 调试器中加载不匹配的符号

c# - SQL 异常 : "Impersonate Session Security Context" cannot be called in this batch because a simultaneous batch has called it

c# - 如何在自定义网络聊天实现机器人框架中更改用户名/用户ID

ios - 使用 xcode 8 上传后,应用程序未显示在事件选项卡中

c# - ASP.NET表单触发AjaxFileUpload触发updatePanel问题

c# - 从 char[] 转换后从字符串中修剪/空值(在 C# 中)