StackWalk другого процесса в delphi? - PullRequest
       11

StackWalk другого процесса в delphi?

2 голосов
/ 21 сентября 2010

Вы знаете, как читать другой стек процессов в Delphi ??

Ответы [ 2 ]

8 голосов
/ 21 сентября 2010

Да.

Вы можете перечислять темы с помощью Toolhelp функций; получить контекст с GetThreadContext(); и читать стековую память (т.е. используя ESP из контекста) с ReadProcessMemory(). Стек увеличивается в памяти вниз, поэтому чтение областей памяти после того, как ESP идет вниз по стеку.

1 голос
/ 23 сентября 2010

Вы можете взглянуть на процедуру "TThreadSampler.MakeStackDump" следующего модуля моего профилировщика выборки: http://code.google.com/p/asmprofiler/source/browse/trunk/Sampling/mcThreadSampler.pas

Эта функция может читать из того же потока, или того же процесса или другого процесса (каждый со своей оптимизированной функцией).

Кстати: мой Sampling Profiler считывает символы отладки Delphi (.map, .jdbg и т. д.), потому что до сих пор нет хорошего конвертера символов отладки Delphi в Pdb (так что вы можете просмотретьстек Delphi-программы в отладчике Windows или Process Explorer, Visual Studio и т. д.).Вы также можете использовать мой профилировщик выборки для просмотра текущего стека любого процесса!http://code.google.com/p/asmprofiler/wiki/AsmProfilerSamplingMode

...