在我的代码中设置断点如何允许以下代码完成,否则会失败。
这是问题所在。
我正在为 SAP B1 编写一个附加组件并遇到以下问题。
当我加载表单时,我想在表单矩阵中输入一些值。
但是如果没有断点(在加载表单的方法上设置),之后执行的部分代码将失败。那部分代码引用了一个尚未显示的矩阵,这会导致异常。这一切都很清楚。但是为什么设置断点“解决”了问题。
到底是怎么回事?
我怀疑我的断点在加载和显示我的表单和引用该表单元素的部分代码之间引入了一些延迟,但我可能是错的。
在我的代码中设置断点如何允许以下代码完成,否则会失败。
这是问题所在。
我正在为 SAP B1 编写一个附加组件并遇到以下问题。
当我加载表单时,我想在表单矩阵中输入一些值。
但是如果没有断点(在加载表单的方法上设置),之后执行的部分代码将失败。那部分代码引用了一个尚未显示的矩阵,这会导致异常。这一切都很清楚。但是为什么设置断点“解决”了问题。
到底是怎么回事?
我怀疑我的断点在加载和显示我的表单和引用该表单元素的部分代码之间引入了一些延迟,但我可能是错的。
在调试器下运行确实会减慢您的应用程序,并且即使没有断点也会经常隐藏竞争条件。当您引入断点时,它更有可能隐藏竞争条件。这类问题可能很难解决。您可能想要引入一些简单的日志记录(例如 log4net)来查看它正在发生的事情,而不会对应用程序产生太大影响,以至于您会看到不同的行为。请记住,即使是日志记录也足以改变事情。
有断点意味着每次在运行时加载模块时,Visual Studio 都会扫描模块以查找可能的断点位置。这必须引入延迟。
这是基于 Windows 窗体的应用程序吗?(恐怕我对 SAP B1 一无所知)尝试将您的代码放入表单的 Load 事件中,如果它不存在的话。一些控件在分配它们的句柄之前还没有准备好正确使用,这在 Windows 消息循环运行几次之前不会发生。
断点确实会引入一些延迟。断点是在程序常规执行中添加额外的指令。硬件和软件断点都为程序的执行添加了一些东西(尽管数量会有很大差异)。