Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: Threadname nach FastMM4-Meldung rauskriegen

  Alt 25. Mai 2016, 10:29
Im Log des Debuggers suchen und sonst garnicht, weil Borland/Codegear/Embarcadero das einfach zu blöd implementiert haben, denn ...

Delphi-Quellcode:
class procedure TThread.NameThreadForDebugging(AThreadName: AnsiString; AThreadID: TThreadID); // ist auch nicht virtuell
type
  TThreadNameInfo = record
    FType: LongWord; // must be 0x1000
    FName: PAnsiChar; // pointer to name (in user address space)
    FThreadID: LongWord; // thread ID (-1 indicates caller thread)
    FFlags: LongWord; // reserved for future use, must be zero
  end;
var
  ThreadNameInfo: TThreadNameInfo;
begin
  if IsDebuggerPresent then // ########################### toll, niwa?
  begin
    ThreadNameInfo.FType := $1000;
    ThreadNameInfo.FName := PAnsiChar(AThreadName);
    ThreadNameInfo.FThreadID := AThreadID;
    ThreadNameInfo.FFlags := 0;
    try
      RaiseException($406D1388, 0, sizeof(ThreadNameInfo) div sizeof(LongWord), @ThreadNameInfo);
    except
    end;
  end;
end;
Also erstmal müsstest DU nach Start der Threads und einmal im Hauptthread das TThread.NameThreadForDebugging aufrufen und dann ist diese Funktion total nutzlos, wenn das Programm nicht im Debugger läuft.

Alternativ diese Funktion böse hooken und die Threads selber in einer Liste speichern
oder TThread.Execute, bzw. Classes.ThreadProc oder Windows.BeginThread hooken und die ThreadIDs in einer Liste speichern
oder direkt in deine Threads am Anfang einen Code rein, der das in einer eigenen Liste speichert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat