从Delphi 2006升级到Delphi XE后关闭应用程序时无效的指针异常

时间:2010-12-14 13:44:47

标签: delphi debugging exception delphi-2006 delphi-xe

我刚刚将项目从Delphi 2006升级到Delphi XE。一切都按预期工作,除了我关闭我的应用程序时出现异常。

它没有打破代码行。它在LEAVE命令中中断到CPU窗口。 如果有任何帮助,我附上了Eureka日志。

EurekaLog 6.0.25

Application:
------------------------------------------------------
  1.1 Start Date      : Fri, 3 Dec 2010 10:44:17 +0100
  1.2 Name/Description: LogoTid.exe
  1.3 Version Number  : 
  1.4 Parameters      : 
  1.5 Compilation Date: Fri, 3 Dec 2010 10:44:15 +0100
  1.6 Up Time         : 5 seconds

Exception:
----------------------------------------------------
  2.1 Date          : Fri, 3 Dec 2010 10:44:22 +0100
  2.2 Address       : 004062A0
  2.3 Module Name   : LogoTid.exe
  2.4 Module Version: 
  2.5 Type          : EInvalidPointer
  2.6 Message       : Invalid pointer operation.
  2.7 ID            : 5E21
  2.8 Count         : 1
  2.9 Status        : New
  2.10 Note         : 

User:
-------------------------------------------------------
  3.1 ID        : oda
  3.2 Name      : 
  3.3 Email     : 
  3.4 Company   : 
  3.5 Privileges: SeIncreaseQuotaPrivilege        - OFF
                  SeSecurityPrivilege             - OFF
                  SeTakeOwnershipPrivilege        - OFF
                  SeLoadDriverPrivilege           - OFF
                  SeSystemProfilePrivilege        - OFF
                  SeSystemtimePrivilege           - OFF
                  SeProfileSingleProcessPrivilege - OFF
                  SeIncreaseBasePriorityPrivilege - OFF
                  SeCreatePagefilePrivilege       - OFF
                  SeBackupPrivilege               - OFF
                  SeRestorePrivilege              - OFF
                  SeShutdownPrivilege             - OFF
                  SeDebugPrivilege                - ON
                  SeSystemEnvironmentPrivilege    - OFF
                  SeChangeNotifyPrivilege         - ON
                  SeRemoteShutdownPrivilege       - OFF
                  SeUndockPrivilege               - OFF
                  SeManageVolumePrivilege         - OFF
                  SeImpersonatePrivilege          - ON
                  SeCreateGlobalPrivilege         - ON
                  SeIncreaseWorkingSetPrivilege   - OFF
                  SeTimeZonePrivilege             - OFF
                  SeCreateSymbolicLinkPrivilege   - OFF

Active Controls:
------------------------------------------------------------------
  4.1 Form Class   : TAppBuilder
  4.2 Form Text    : LogoTid - Delphi XE - uMain [Running] [Built]
  4.3 Control Class: 
  4.4 Control Text : 

Computer:
------------------------------------------------------------------------------------------------
  5.1 Name          : OLE-LAPTOP
  5.2 Total Memory  : 3891 Mb
  5.3 Free Memory   : 778 Mb
  5.4 Total Disk    : 120 Gb
  5.5 Free Disk     : 57,93 Gb
  5.6 System Up Time: 1 day, 23 hours, 16 minutes, 56 seconds
  5.7 Processor     : Intel(R) Core(TM) i5 CPU       M 520  @ 2.40GHz
  5.8 Display Mode  : 1920 x 1200, 32 bit
  5.9 Display DPI   : 96
  5.10 Video Card   : Intel(R) Graphics Media Accelerator HD (driver 8.15.10.2025 - RAM 1721 MB)
  5.11 Printer      : RICOH Aficio 2232C RPCS (driver 1.0.0)

Operating System:
--------------------------------------------
  6.1 Type    : Microsoft Windows 7 (64 bit)
  6.2 Build # : 7600
  6.3 Update  : 
  6.4 Language: Danish
  6.5 Charset : 0


Call Stack Information:
-------------------------------------------------------------------
|Address |Module      |Unit       |Class|Procedure/Method   |Line |
-------------------------------------------------------------------
|Running Thread: ID=5632; Priority=0; Class=; [Main]              |
|-----------------------------------------------------------------|
|00D171A1|LogoTid.exe |LogoTid.dpr|     |                   |32[5]|
|76A73675|kernel32.dll|           |     |BaseThreadInitThunk|     |
-------------------------------------------------------------------



Assembler Information:
-----------------------------------------------------------------
; System.TObject.FreeInstance 
; ----------------------------
00406294  push    ebx
00406295  mov     ebx, eax
00406297  mov     eax, ebx
00406299  call    System.TObject.CleanupInstance
0040629E  mov     eax, ebx
004062A0  call    System._FreeMem                 ; <-- EXCEPTION
004062A5  pop     ebx
004062A6  ret

Registers:
-----------------------------
EAX: 02AF8058   EDI: 00000001
EBX: 004062A5   ESI: 004062A5
ECX: 0041D700   ESP: 0018FE98
EDX: 004062A5   EIP: 004062A0

Stack:               Memory Dump:
------------------   ---------------------------------------------------------------------------
0018FE98: FFFFFF02   004062A0: E8 3B E7 FF FF 5B C3 90 83 C0 CC 8B 00 C3 8B C0  .;...[..........
0018FE9C: 00404B78   004062B0: 84 D2 74 08 83 C4 F0 E8 54 05 00 00 84 D2 74 0F  ..t.....T.....t.
0018FEA0: 02B1CEC0   004062C0: E8 A3 05 00 00 64 8F 05 00 00 00 00 83 C4 0C C3  .....d..........
0018FEA4: 02B1CEC0   004062D0: E8 E3 05 00 00 84 D2 7E 05 E8 82 05 00 00 C3 90  .......~........
0018FEA8: 00404BC2   004062E0: 85 C0 74 07 B2 01 8B 08 FF 51 FC C3 53 56 57 89  ..t......Q..SVW.
0018FEAC: 02B1CEC0   004062F0: C3 89 D7 AB 8B 4B CC 31 C0 51 C1 E9 02 49 F3 AB  .....K.1.Q...I..
0018FEB0: 0018FEE8   00406300: 59 83 E1 03 F3 AA 89 D0 89 E2 8B 4B AC 85 C9 74  Y..........K...t
0018FEB4: 004062A5   00406310: 01 51 8B 5B D0 85 DB 74 04 8B 1B EB ED 39 D4 74  .Q.[...t.....9.t
0018FEB8: 03A02F01   00406320: 1D 5B 8B 0B 83 C3 04 8B 73 10 85 F6 74 06 8B 7B  .[......s...t..{
0018FEBC: 00406865   00406330: 14 89 34 07 83 C3 1C 49 75 ED 39 D4 75 E3 5F 5E  ..4....Iu.9.u._^
0018FEC0: 0045B949   00406340: 5B C3 8B C0 53 56 89 C3 89 C6 8B 36 8B 56 B4 8B  [...SV.....6.V..
0018FEC4: 03A02FA0   00406350: 76 D0 85 D2 74 07 E8 85 36 00 00 89 D8 85 F6 75  v...t...6......u
0018FEC8: 03A02F01   00406360: E9 89 D8 E8 78 06 00 00 5E 5B C3 90 87 D1 81 F9  ....x...^[......
0018FECC: 004062EB   00406370: 00 00 00 FF 73 11 81 F9 00 00 00 FE 72 07 0F BF  ....s.......r...
0018FED0: 00912606   00406380: C9 03 08 FF 21 FF E1 81 E1 FF FF FF 00 01 C1 89  ....!...........
0018FED4: 00000000   00406390: D0 8B 11 E9 A8 59 00 00 C3 8D 40 00 3B C2 0F 94  .....Y....@.;...

---编辑

好的,尝试转动我的程序的部分,直到错误消失,并找到麻烦制造者。

这是我的webservice WSDL生成的代理。如果我在不调用服务上的任何函数的情况下创建代理对象,则会抛出错误。

我创建了一个测试项目,没有创建代理对象之外的任何其他代码,它也会抛出错误。我也尝试过另一个webservice,同样的错误。这两个Web服务都是使用Delphi 2006(.net 1.1)创建的。

最后,我尝试使用在VS2010中创建的.net 4.0 webservice。没问题。因此,Delphi XE项目与.net 1.1 webservices或Delphi 2006 webservices不兼容。无论哪种方式都是一团糟。

如何解决这个问题,或许是一种解决方法?

3 个答案:

答案 0 :(得分:4)

日志在这里没有帮助。它看起来像是内存损坏问题,如果您的代码对字符串执行索引操作(例如写入字符串的字符位置),并且您没有修复将字符串转换为PChar或类似代码的所有代码,则会发生此问题。

换句话说,您必须仔细分析您的代码。首先完全关闭一些模块和代码块,直到异常消失。然后开始逐个添加它们。

答案 1 :(得分:3)

可能与string现在是Unicode字符串(每个字符2个字节),而不是AnsiString(每个字符1个字节)这一事实有关。如果你使用字符串的原始字节,这是一个主要问题。要解决此问题,只需将所有string替换为AnsiString,将所有char替换为AnsiChar。当然,这样做会失去Unicode支持。更好的解决方法是重写字符串处理例程。通常情况下,只需要在这里和那里添加一些乘法因子sizeof(char)(= 2)。

示例(旧代码):

byteSize = length(str);

示例(新代码):

byteSize = length(str) * sizeof(char);

答案 2 :(得分:0)

找到解决方案/解决方法。

如果直接在表单中使用Webservice,则会发生错误。

创建一个空的vcl表单项目,使用wsdl生成器生成一个webservice代理。在使用部分中包含代理类。声明代理的私有对象,然后在表单create中使用代理类getXXXXXXX函数来启动您的对象。运行项目。

当您关闭表单时,会出现异常。

解决方案/解决方法是创建自己的类,并通过此类与Web服务代理进行通信。