Einzelnen Beitrag anzeigen

SneakyBagels
(Gast)

n/a Beiträge
 
#28

AW: Argument außerhalb des gültigen Bereichs (for-Schleife zählt ins Minus)

  Alt 13. Mai 2017, 09:53
Wie genau komme ich denn an den Assemblercode? Breakpont ja gut aber Assembercode? Falls du das hier meinst

Delphi-Quellcode:

cThreadC.pas.1270: ShowMessage(IntToStr(i));
0000000000C0D1F8 488B8560090000 mov rax,[rbp+$00000960]
0000000000C0D1FF 8B4020 mov eax,[rax+$20]
0000000000C0D202 89859C000000 mov [rbp+$0000009c],eax
0000000000C0D208 488D8DB8040000 lea rcx,[rbp+$000004b8]
0000000000C0D20F 8B959C000000 mov edx,[rbp+$0000009c]
0000000000C0D215 E8469A82FF call IntToStr
0000000000C0D21A 488B8DB8040000 mov rcx,[rbp+$000004b8]
0000000000C0D221 E88A83A4FF call ShowMessage
uThreadC.pas.2523: end; // Das hier ist das end vom Execute-Block
0000000000C0D226 488B8560090000 mov rax,[rbp+$00000960]
0000000000C0D22D 488D4020 lea rax,[rax+$20]
0000000000C0D231 832801 sub dword ptr [rax],$01
uThreadC.pas.1269: for i := cList.Count - 1 downto 0 do
0000000000C0D234 8B859C000000 mov eax,[rbp+$0000009c]
0000000000C0D23A 85C0 test eax,eax
0000000000C0D23C 7DBA jnl TThreadC.Execute + $1498
uThreadC.pas.1271: ShowMessage('END');
0000000000C0D23E 488D0D77660000 lea rcx,[rel $00006677]
0000000000C0D245 E86683A4FF call ShowMessage
Wie gesagt. Nur diese eine einzige Zeile mit dem 3x TFile kommentieren und das Problem ist weg nur seltsam ist es schon. Bzw. 1x von den 3 TFile rausnehmen reicht auch schon.

Gerade früh noch schnell einen Test gemacht. Lasse ich TFile... komplett weg und füge stattdessen das hier ein
Delphi-Quellcode:

function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
var
 ModifiedTime: TFileTime;
 SystemTime: TSystemTime;
begin
 Result := 0;
 if (FileTime.dwLowDateTime = 0) and (FileTime.dwHighDateTime = 0) then
  Exit;
 try
  FileTimeToLocalFileTime(FileTime, ModifiedTime);
  FileTimeToSystemTime(ModifiedTime, SystemTime);
  Result := SystemTimeToDateTime(SystemTime);
 except
  // Prevent a black whole
 end;

GetFileAttributesEx(PChar(s), GetFileExInfoStandard, @fileDate);

FileTimeToDateTime(fileDate.ftCreationTime),
FileTimeToDateTime(fileDate.ftLastAccessTime),
FileTimeToDateTime(fileDate.ftLastWriteTime),
dann ist der Fehler auch weg. Es scheint also zu 100% (?) etwas mit dem TFile-Record zu tun zu haben.

Geändert von SneakyBagels (13. Mai 2017 um 10:17 Uhr)
  Mit Zitat antworten Zitat