0

早上好,

我的 PowerBuilder 12.1 Classic (Build 6639) 和生成的 PowerBuilder 应用程序似乎都遇到了问题。我们目前遇到的问题是应用程序(或者,如果我们通过代码运行,IDE)在关闭主 MDI 后崩溃。不幸的是,崩溃没有一致的模式。我可以在 MDI 打开时立即关闭它,有时它会崩溃,有时它会正确关闭。

最初,我认为 Application 对象的关闭事件有问题,或者在引发 systemerror 事件的地方发生了一些事情。我通过关闭事件进行了调试,每一行都成功执行,但应用程序仍然崩溃。

我想我会尝试在应用程序上使用 /PBDEBUG 标志,并尝试获取成功关闭和不成功关闭的调试信息。我设法做到了,并且该文件包含完全相同的信息。它们都以以下信息结束:

  Executing object function +DESTROY for class TRANSACTION, lib entry _TYPEDEF
      Executing instruction at line 2325
      Executing object function DESTROYTRANSACTION for class TRANSACTION, lib entry _TYPEDEF
          Executing system dll function
      End class function DESTROYTRANSACTION for class TRANSACTION, lib entry _TYPEDEF
      Executing instruction at line 2326
  End class function +DESTROY for class TRANSACTION, lib entry _TYPEDEF

我检查了 Windows 应用程序事件查看器,这是显示的内容:

Fault bucket , type 0
Event Name: CLR20r3
Response: Not available
Cab Id: 0

Problem signature:
P1: txintf.exe
P2: 11.1.18.1
P3: 4cec7a53
P4: System
P5: 2.0.0.0
P6: 506c18e6
P7: 2d4a
P8: 36
P9: System.ObjectDisposedException
P10: 

有人告诉我,当我们将 PB11 项目迁移到 PB12 Classic 时,这些问题开始出现。不知道这是否与它有关,但我想我会把它扔在那里。

有没有人遇到过类似的问题,或者有任何其他提示可以用来尝试诊断此问题?

谢谢你。

编辑:我注意到有时错误会显示在 Windows 事件日志中,以下是一些信息:

Faulting application name: txintf.exe, version: 13.0.2.3, time stamp: 0x4cec7a53
Faulting module name: KERNELBASE.dll, version: 6.1.7601.18015, time stamp: 0x50b83c8a
Exception code: 0xe0434f4d
Fault offset: 0x0000c41f
Faulting process id: 0x2120
Faulting application start time: 0x01ce0099b3021b60
Faulting application path: MyApplicationPath\txintf.exe
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll

Just-In-Time Debugger 也有一些罕见的时候会弹出,说明 System.ObjectDisposedException 的异常已经被捕获。从该信息来看,似乎有一个已被破坏的对象正在被某物访问。

我通过调试器检查了调用堆栈,在 Application.Close() 事件之后它似乎没有任何内容。

4

1 回答 1

1

对象破坏让我回到了我的理论,并让我想起了我曾经发现的另一个案例。它是一个非自动实例化的 NVO,以一个自动实例化的 NVO 作为实例变量。是的,这听起来像是在打死马,但这是我听说过的唯一案例。一个调试想法是在所有对象的 Destructor 事件中放置一行脚本(它们都是继承的,对吗?),在那里放置一个断点,并尝试缩小哪些对象是或不是问题的一部分。

于 2013-02-04T23:39:05.070 回答