C# 应用程序在配置调试中抛出异常,但在发布版中工作

C# 应用程序在配置调试中抛出异常,但在发布版中工作,c#,serial-port,release,C#,Serial Port,Release,在我不再工作的同事之后,我正在尝试修复应用程序。此应用程序通过串行端口与设备连接,并以windows窗体显示接收到的数据 事实证明,当我使用发布配置时,应用程序几乎可以完美地工作,并且在调试时抛出异常 我使用其他程序来检查我发送和接收的帧。因为调试中的异常与读取此帧相关。它经常抛出异常,因为帧太短,无法读取某些内容。我读到了一些根本不应该得到的东西,另外,第二个程序显示,尽管如此,几乎所有的帧都是正确的 我不知道发布和Dubug的可能性,我也不知道在我的项目中哪里可以找到关于创建应用程序的差异。

在我不再工作的同事之后,我正在尝试修复应用程序。此应用程序通过串行端口与设备连接,并以windows窗体显示接收到的数据

事实证明,当我使用发布配置时,应用程序几乎可以完美地工作,并且在调试时抛出异常

我使用其他程序来检查我发送和接收的帧。因为调试中的异常与读取此帧相关。它经常抛出异常,因为帧太短,无法读取某些内容。我读到了一些根本不应该得到的东西,另外,第二个程序显示,尽管如此,几乎所有的帧都是正确的

我不知道发布和Dubug的可能性,我也不知道在我的项目中哪里可以找到关于创建应用程序的差异。除了配置管理器之外,这两个配置管理器都是相同的

有人能告诉我为什么它在发行版中工作而不在调试中吗


应用程序是用.NET2.0编写的。现在我将其更改为4.7.2,但在发行版或调试中没有任何更改。

您是否已尝试重建应用程序或尝试删除调试文件并重新启动程序

这也是我发现的一个很好的解释

在调试模式下编译时,默认情况下会获得“.pdb”文件以及.exe或.dll。pdb文件称为“符号”。这就是允许异常为您提供堆栈跟踪的原因,它可以准确地告诉您哪个类和方法失败了,甚至可以指向.cs文件中的行号。它还允许将调试器附加到正在运行的程序上,并允许您“单步执行”代码

在发布模式下编译时,编译器会“优化”编译后的代码(以使执行尽可能高效)。要做到这一点,它将编译与您实际编写的代码稍有不同的代码。这样做,如果抛出异常,类、方法和行号将不那么准确。在某些情况下,除非在二进制级别,否则无法跟踪异常,因为某些内容已编译成类或方法,而这些类或方法不包含在任何.cs文件中


在整个解决方案中搜索
#if DEBUG
#if RELEASE
。这两种模式之间可能存在一些差异。感谢您的回复。不幸的是,我没有在我的代码中找到它/谢谢你的回复。我认为可能是这样的,因为我没有发现代码中有什么不同。最后,应用程序的调试速度变慢了,并且经常出现读取帧的问题。