【问题标题】:Application throw exception in configuration Debug but work in Release应用程序在配置调试中抛出异常但在发布中工作
【发布时间】:2019-12-19 14:32:32
【问题描述】:

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

事实证明,当我使用 Release 配置时,应用程序几乎可以完美运行,而在 Debug 中则抛出异常。

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

我不知道 Release 和 Dubug 的可能性,我不知道在我的项目中哪里可以找到有关创建应用程序差异的信息。除了配置管理器,两者都相同。

谁能告诉我为什么它在 Release 中有效而在 Debug 中无效?

应用程序是用 .NET 2.0 编写的。现在我将其更改为 4.7.2,但它在发布和调试中都没有改变。

【问题讨论】:

  • 在整个解决方案中搜索#if DEBUG#if RELEASE。应该会向您展示两种模式之间可能存在的一些差异。
  • 感谢您的回复。不幸的是,我没有在我的代码中找到它;/

标签: c# serial-port release


【解决方案1】:

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

这也是我找到的一个很好的解释

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

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

【讨论】:

  • 感谢回复。我认为可以,因为我没有发现代码不同。
  • 最后应用程序调试速度变慢,并且经常出现读帧问题。
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2013-05-23
  • 2019-12-05
相关资源
最近更新 更多