Watch, Follow, &
Connect with Us
Public Report
Report From: Delphi-BCB/Debugger/Stepping    [ Add a report in this area ]  
Report #:  129141   Status: Open
[Win64] debugger will not step into interface methods
Project:  Delphi Build #:  20.0.16277.1276
Version:    20.1 Submitted By:   Chris Ciapala
Report Type:  Basic functionality failure Date Reported:  12/1/2014 4:49:50 PM
Severity:    Infrequently encountered problem Last Updated: 12/29/2014 8:53:46 PM
Platform:    All versions Internal Tracking #:   57694
Resolution: None (Resolution Comments) Resolved in Build: : None
Duplicate of:  None
Voting and Rating
Overall Rating: No Ratings Yet
0.00 out of 5
Total Votes: 11
Description
x64 debugger will not "step into" interface method calls.
Steps to Reproduce:
{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N-,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
{$MINSTACKSIZE $00004000}
{$MAXSTACKSIZE $00100000}
{$IMAGEBASE $00400000}
{$APPTYPE GUI}
{$WARN SYMBOL_DEPRECATED ON}
{$WARN SYMBOL_LIBRARY ON}
{$WARN SYMBOL_PLATFORM ON}
{$WARN SYMBOL_EXPERIMENTAL ON}
{$WARN UNIT_LIBRARY ON}
{$WARN UNIT_PLATFORM ON}
{$WARN UNIT_DEPRECATED ON}
{$WARN UNIT_EXPERIMENTAL ON}
{$WARN HRESULT_COMPAT ON}
{$WARN HIDING_MEMBER ON}
{$WARN HIDDEN_VIRTUAL ON}
{$WARN GARBAGE ON}
{$WARN BOUNDS_ERROR ON}
{$WARN ZERO_NIL_COMPAT ON}
{$WARN STRING_CONST_TRUNCED ON}
{$WARN FOR_LOOP_VAR_VARPAR ON}
{$WARN TYPED_CONST_VARPAR ON}
{$WARN ASG_TO_TYPED_CONST ON}
{$WARN CASE_LABEL_RANGE ON}
{$WARN FOR_VARIABLE ON}
{$WARN CONSTRUCTING_ABSTRACT ON}
{$WARN COMPARISON_FALSE ON}
{$WARN COMPARISON_TRUE ON}
{$WARN COMPARING_SIGNED_UNSIGNED ON}
{$WARN COMBINING_SIGNED_UNSIGNED ON}
{$WARN UNSUPPORTED_CONSTRUCT ON}
{$WARN FILE_OPEN ON}
{$WARN FILE_OPEN_UNITSRC ON}
{$WARN BAD_GLOBAL_SYMBOL ON}
{$WARN DUPLICATE_CTOR_DTOR ON}
{$WARN INVALID_DIRECTIVE ON}
{$WARN PACKAGE_NO_LINK ON}
{$WARN PACKAGED_THREADVAR ON}
{$WARN IMPLICIT_IMPORT ON}
{$WARN HPPEMIT_IGNORED ON}
{$WARN NO_RETVAL ON}
{$WARN USE_BEFORE_DEF ON}
{$WARN FOR_LOOP_VAR_UNDEF ON}
{$WARN UNIT_NAME_MISMATCH ON}
{$WARN NO_CFG_FILE_FOUND ON}
{$WARN IMPLICIT_VARIANTS ON}
{$WARN UNICODE_TO_LOCALE ON}
{$WARN LOCALE_TO_UNICODE ON}
{$WARN IMAGEBASE_MULTIPLE ON}
{$WARN SUSPICIOUS_TYPECAST ON}
{$WARN PRIVATE_PROPACCESSOR ON}
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CODE OFF}
{$WARN UNSAFE_CAST OFF}
{$WARN OPTION_TRUNCATED ON}
{$WARN WIDECHAR_REDUCED ON}
{$WARN DUPLICATES_IGNORED ON}
{$WARN UNIT_INIT_SEQ ON}
{$WARN LOCAL_PINVOKE ON}
{$WARN MESSAGE_DIRECTIVE ON}
{$WARN TYPEINFO_IMPLICITLY_ADDED ON}
{$WARN RLINK_WARNING ON}
{$WARN IMPLICIT_STRING_CAST ON}
{$WARN IMPLICIT_STRING_CAST_LOSS ON}
{$WARN EXPLICIT_STRING_CAST OFF}
{$WARN EXPLICIT_STRING_CAST_LOSS OFF}
{$WARN CVT_WCHAR_TO_ACHAR ON}
{$WARN CVT_NARROWING_STRING_LOST ON}
{$WARN CVT_ACHAR_TO_WCHAR ON}
{$WARN CVT_WIDENING_STRING_LOST ON}
{$WARN NON_PORTABLE_TYPECAST ON}
{$WARN XML_WHITESPACE_NOT_ALLOWED ON}
{$WARN XML_UNKNOWN_ENTITY ON}
{$WARN XML_INVALID_NAME_START ON}
{$WARN XML_INVALID_NAME ON}
{$WARN XML_EXPECTED_CHARACTER ON}
{$WARN XML_CREF_NO_RESOLVE ON}
{$WARN XML_NO_PARM ON}
{$WARN XML_NO_MATCHING_PARM ON}
{$WARN IMMUTABLE_STRINGS OFF}
program xe6debugger;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  ISomeInterface = interface
    ['{F5C1C118-3D1A-4952-87DC-8B4E7414CD00}']

    procedure StepInto;

  end;

  TSomeInstance = class(TInterfacedObject, ISomeInterface)
  public // ISomeInterface
    procedure StepInto;

  public
    procedure ObjectStepInto;

  end;

procedure TSomeInstance.StepInto;
begin
  WriteLn('StepInto');
end;

procedure TSomeInstance.ObjectStepInto;
begin
  WriteLn('ObjectStepInto');
end;

procedure TestRoutine;
var someInstance  : TSomeInstance;
    someInterface : ISomeInterface;
begin

  // put a break point on the someInstance assignment below, then using
  // "Trace Into" step into each of the calls after the someInterface
  // assignment.

  someInstance := TSomeInstance.Create;
  someInterface := someInstance;

  // win32 and win64 targets - both methods can be "stepped into"
  someInstance.StepInto;
  someInstance.ObjectStepInto;

  // this call will only trace into on win32 target, win64 will not..
  someInterface.StepInto;

end;

begin
  try
    TestRoutine;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

The above code demonstrates the problem, attempting to step into "someInterface.StepInto" will succeed when using the x86 debugger, but fail with the x64 debugger.
Workarounds
Using CPU view to step into the call or setting a breakpoint in the ultimate destination of the call.
Attachment
xe6debugger.zip
Comments

Tomohiro Takahashi at 12/1/2014 8:29:40 PM -
Which build no of Delphi XE6 do you use, for example Delphi XE6 Update1(20.0.16277.1276) etc...?

Is your issue same as QC#125953 ?

Chris Ciapala at 12/8/2014 7:10:55 PM -
Embarcadero® Delphi XE6 Version 20.0.16277.1276
Delphi XE6 and C++Builder XE6 Update 1

It does appear to be the same issue as QC#125953, except that issue indicates that the problem does not occur consistently. In my case, the issue is consistent.

Tomohiro Takahashi at 12/9/2014 3:25:04 AM -
ok, could you please attach sample project to reprouce/confirm your issue?

Chris Ciapala at 12/26/2014 5:35:35 AM -
I cannot find a way to upload a project through the web interface and the Quality Central application will not connect to the server. The project is just a copy and paste of the example code anyway.

Tomohiro Takahashi at 12/27/2014 8:21:28 PM -
Could you please upload it(as a .zip) to Discussion Forum? I will attach it to this report instead of you.
[Embarcadero Discussion Forums >> Attachments]
https://forums.embarcadero.com/forum.jspa?forumID=2

Chris Ciapala at 12/28/2014 9:56:02 PM -
The example project has been uploaded to the discussion forum as you requested.

https://forums.embarcadero.com/thread.jspa?threadID=111283&stqc=true

Tomohiro Takahashi at 12/29/2014 8:45:02 PM -
I attached the .zip file to this report instead of you. Thanks.

Server Response from: ETNACODE01