C# 调试版本和发布版本之间的调用堆栈行号是否不同?

C# 调试版本和发布版本之间的调用堆栈行号是否不同?,c#,debugging,callstack,C#,Debugging,Callstack,我被一个客户发给我的呼叫堆栈弄糊涂了。当然,客户的版本是发布版本,但是异常的行号没有意义 刚才我注意到在指定的行号上方有一个#if DEBUG…#endif块 如果在指定位置的代码AOB中有一个#if debug…#endif块,编译器是否会删除/为编译器删除此块,从而导致调试版本和发布版本之间的行号不同 进一步的测试表明,上面的链接和注释表明:行号可能因各种JIT优化原因而不同,但不仅仅是因为一个#if…#endif块。发布版本由编译器优化,我不希望发布版本中带有调试版本行号信息的行号不可靠,

我被一个客户发给我的呼叫堆栈弄糊涂了。当然,客户的版本是发布版本,但是异常的行号没有意义

刚才我注意到在指定的行号上方有一个#if DEBUG…#endif块


如果在指定位置的代码AOB中有一个#if debug…#endif块,编译器是否会删除/为编译器删除此块,从而导致调试版本和发布版本之间的行号不同

进一步的测试表明,上面的链接和注释表明:行号可能因各种JIT优化原因而不同,但不仅仅是因为一个#if…#endif块。

发布版本由编译器优化,我不希望发布版本中带有调试版本行号信息的行号不可靠,抖动优化器。这就是为什么默认生成设置会从PDB文件中忽略行号。您更改了该设置,您所能做的就是不要太相信您的眼睛。如果未指定调试条件编译开关,则将不会编译
#if DEBUG
条件编译块中的语句(不包括在IL中)。发布生成配置通常不指定此开关。但行号仍将正确报告。(经过测试)。(客户服务器上的pdb文件是否是与程序集相同版本的输出?@oguz是,pdb文件匹配