C++ 为什么安装的程序版本与调试模式下运行的程序版本不同?

C++ 为什么安装的程序版本与调试模式下运行的程序版本不同?,c++,visual-studio,visual-c++,time,C++,Visual Studio,Visual C++,Time,我创建了一个程序,将一组文本发送到speed 9600上的COM端口。在调试模式下,程序发送所有数据,然后关闭COM端口。位如果我创建一个安装程序项目,然后将其安装在同一台机器上,它不会发送最后的符号。它在传输所有数据之前关闭端口。所以我的问题是:是调试exe文件变慢了,还是IDE(VisualStudio)使它变慢了 还添加了睡眠(100)在最后一个转换命令和端口关闭行之间,问题消失。您的观察结果与错误编写的程序相对应,显示了当前只有发布版本才能检测到的错误迹象 发布版本往往运行得更快,因为它

我创建了一个程序,将一组文本发送到speed 9600上的COM端口。在调试模式下,程序发送所有数据,然后关闭COM端口。位如果我创建一个安装程序项目,然后将其安装在同一台机器上,它不会发送最后的符号。它在传输所有数据之前关闭端口。所以我的问题是:是调试exe文件变慢了,还是IDE(VisualStudio)使它变慢了


还添加了
睡眠(100)在最后一个转换命令和端口关闭行之间,问题消失。

您的观察结果与错误编写的程序相对应,显示了当前只有发布版本才能检测到的错误迹象

发布版本往往运行得更快,因为它们是在增强的优化级别创建的,并且关闭了各种调试实用程序。它们以牺牲开发时的可调试性为代价,旨在实现最大的生产性能。创建安装包显然创建了发布版本(这很有意义)

性能的提高反过来会影响程序的时间安排。如果您意外地依赖于在端口关闭之前有一段很长的时间,给您的程序足够的时间只是偶然地传输它的所有数据,那么当这个过程加快时,您的bug就会变得可见。没有足够的时间让数据通过。添加
Sleep
会模拟调试构建的较慢执行,因此几乎肯定会确认存在计时错误


这是个好消息!你有强有力的证据证明bug的位置和形式。现在你所要做的就是修复它

您的观察结果与一个编写错误的程序相对应,显示了一个目前只能通过发布版本检测到的bug的迹象

发布版本往往运行得更快,因为它们是在增强的优化级别创建的,并且关闭了各种调试实用程序。它们以牺牲开发时的可调试性为代价,旨在实现最大的生产性能。创建安装包显然创建了发布版本(这很有意义)

性能的提高反过来会影响程序的时间安排。如果您意外地依赖于在端口关闭之前有一段很长的时间,给您的程序足够的时间只是偶然地传输它的所有数据,那么当这个过程加快时,您的bug就会变得可见。没有足够的时间让数据通过。添加
Sleep
会模拟调试构建的较慢执行,因此几乎肯定会确认存在计时错误


这是个好消息!你有强有力的证据证明bug的位置和形式。现在你所要做的就是修复它

调试exe通常比发行版慢,在调试器下运行它会进一步降低速度。如果发行版的生成速度不快,那么就没有理由这样做(调试符号在.pdb文件中是外部的)。我认为您问的问题是错误的。通过提交一个,也许我们可以看到:什么代码关闭了端口。。。你写了什么?或者“发送”操作是异步的(通常是为了提高性能),因此在线程退出时可能仍在运行?@DOUGLASO.MOEN:我不同意。OP提出了一个明确且可回答的问题。他们现在可以学习所学的知识并进入诊断的下一步。我们来这里不是为了直接修复每个人的bug。这不是调试网站。调试exe通常比发行版慢,在调试程序下运行它会进一步降低速度。如果发行版的构建速度不快,那么就没有理由这样做(调试符号在.pdb文件中是外部的)。我想你问错了问题。通过提交一个,也许我们可以看到:什么代码关闭了端口。。。你写了什么?或者“发送”操作是异步的(通常是为了提高性能),因此在线程退出时可能仍在运行?@DOUGLASO.MOEN:我不同意。OP提出了一个明确且可回答的问题。他们现在可以学习所学的知识并进入诊断的下一步。我们来这里不是为了直接修复每个人的bug。这不是一个调试网站。