2 Stimmen

StackWalk eines anderen Prozesses in Delphi?

Wissen Sie, wie man einen anderen Prozess-Stack in Delphi lesen kann?

8voto

Barry Kelly Punkte 40566

Ja.

Sie können Threads aufzählen mit Werkzeughilfe Funktionen; den Kontext erhalten Sie mit GetThreadContext() ; und lesen Sie den Stapelspeicher (d.h. mit ESP aus dem Kontext) mit ReadProcessMemory() . Der Stapel wächst im Speicher nach unten, so dass das Lesen von Speicherplätzen nach ESP eine Abwärtsbewegung auf dem Stapel bedeutet.

1voto

André Punkte 8324

Sie könnten einen Blick auf die "TThreadSampler.MakeStackDump"-Prozedur der folgenden Unit meines Sampling-Profilers werfen: http://code.google.com/p/asmprofiler/source/browse/trunk/Sampling/mcThreadSampler.pas

Diese Funktion kann aus demselben Thread, demselben Prozess oder verschiedenen Prozessen (jeweils mit einer eigenen optimierten Funktion) gelesen werden.

Übrigens: Mein Sampling Profiler liest Delphi-Debug-Symbole (.map, .jdbg, usw.), da es immer noch keinen guten Delphi-zu-Pdb-Debug-Symbol-Konverter gibt (damit Sie den Stack eines Delphi-Programms im Windows-Debugger oder Process Explorer, Visual Studio usw. ansehen können). Sie können auch meinen Sampling-Profiler verwenden, um den aktuellen Stack eines beliebigen Prozesses zu sehen! http://code.google.com/p/asmprofiler/wiki/AsmProfilerSamplingMode

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X