Watch, Follow, &
Connect with Us
Public Report
Report From: Delphi-BCB/Compiler/Delphi/Linker    [ Add a report in this area ]  
Report #:  108144   Status: Closed
Debug symbol table is corrupted
Project:  Delphi Build #:  15.0.3953.35171
Version:    15.1 Submitted By:   David Robb
Report Type:  Basic functionality failure Date Reported:  8/22/2012 11:43:53 AM
Severity:    Serious / Highly visible problem Last Updated: 4/15/2014 6:46:53 PM
Platform:    All versions Internal Tracking #:   31316
Resolution: Fixed (Resolution Comments) Resolved in Build: : XE6
Duplicate of:  None
Voting and Rating
Overall Rating: No Ratings Yet
0.00 out of 5
Total Votes: None
Description
The debug symbol table in a very large Delphi executable appears to be corrupted.

We are using TestComplete version 9 to automate this application.  Test Complete has recently been unable to access most public and protected properties, but it can generally access methods (there are a few exceptions).  An analysis of the file produced by running TDump against the executable by Smartbear indicated that the debug information in the executable is corrupted.

This issue is making it impossible to run test scripts against our very large application.

Steps to Reproduce:
Some of the entries in the TDump file look like this:

78ECB36  Type: 86F5  Len: 0018 PROPERTY
  Type: bool8       Flags: 0006  Index Type: none        Property index: 80000000  Reader: AutoMerge [8BFEF]  Writer: @Galaxy@IDesignerHook [8BFF0]

78ED6AA  Type: 875E  Len: 0018 PROPERTY
  Type: rint32      Flags: 0006  Index Type: none        Property index: 80000000  Reader: @Galaxy@TCustomDockForm@Create [69ED5]  Writer: <none> [000]

78ED72C  Type: 8763  Len: 0018 PROPERTY
  Type: 17C7        Flags: 0006  Index Type: none        Property index: 80000000  Reader: @Galaxy@TCustomDockForm@WMNCHitTest [69EDA]  Writer: <none> [000]

78ED746  Type: 8764  Len: 0018 PROPERTY
  Type: bool8       Flags: 0006  Index Type: none        Property index: 80000000  Reader: @Galaxy@TCustomDockForm@WMNCLButtonDown [69EDB]  Writer: <none> [000]

78EF742  Type: 8879  Len: 0018 PROPERTY
  Type: 8871        Flags: 0006  Index Type: none        Property index: 80000000  Reader: @Galaxy@TCustomForm@AlignControls [69E4A]  Writer: <none> [000]


The TestComplete scripts are unable to access the TAdvStringGrid.Row property.  That property is defined as:

property Row: Integer read GetRowEx write SetRowEx;

and the debug symbol table entry looks like this:

7CCEE4C  Type: 2E9E3  Len: 0018 PROPERTY
  Type: 2A3C9       Flags: 0006  Index Type: none        Property index: 80000000  Reader: @Galaxy@TAdvStringGrid@SetRowEx [6C167]  Writer: <none> [000]

SetRowEx is the writer, not the reader.

Workarounds
I tried to compile the application with packages to reduce the symbol table size.  While this seems to help, we couldn't reduce the symbol table size enough to completely eliminate the issue.

Embarcadero's default BPLs do not appear to be compiled with debug info.  For example, TestComplete could not access TStringList.IndexOf.  I attempted to create my own set of replacement BPLs using the debug DCUs in the Lib directory.  This solved that issue but did not reduce the exectuable's size enough to have a clean symbol table.  Then I tried recompiling all of our third party packages against the replacement DCUs I created, and link the executable against all of the packages.  That helped but still not enough to fully support automation.

A test application running inside a VM can be delivered upon request and signing of an NDA.
Attachment
None
Comments

Tomohiro Takahashi at 8/23/2012 8:08:34 PM -
This report was opened with valid Internal Tracking Number.
Thanks.

Server Response from: ETNACODE01