Да, я исправил несколько зависаний и других проблем за последние годы.
Я использовал ProcessExplorer раньше (для просмотра стека), но для этого нужны символы отладки Microsoft. А с Delphi вы можете создать только файл .map. С map2dbg я мог бы преобразовать .map в .dbg, но это не всегда работает (примечание: .dbg устарело, более новые версии средств отладки Microsoft их больше не используют).
Итак, я сделал свой собственный инструмент :-)
Он является частью инструмента «AsmProfiler Sampling»:
http://code.google.com/p/asmprofiler/downloads/detailname=AsmProfiler_Sampling%20v1.0.7.13.zip
Нажмите кнопку «Просмотр стека процесса» на первом экране .
Затем выберите ваш процесс из списка и дважды щелкните по нему:
http://code.google.com/p/asmprofiler/wiki/ProcessStackViewer
Теперь вы можете просматривать трассировку стека каждого потока. Если GUI не отвечает, основной поток зависает, поэтому проверьте первый поток. (примечание: иногда вы видите стек emtpy, потому что функция неправильно выровняла стек для вычислений и т. д., используйте алгоритм прямой трассировки трассировки, чтобы снова получить более полный стек (с большим количеством ложных срабатываний, потому что каждый указатель на стек, который является возможно функция показана!)).
Пожалуйста, опубликуйте стопку здесь, если вы не можете ее решить, чтобы мы могли взглянуть на нее.
Примечание: он использует модуль jclDebug.pas библиотеки JEDI, поэтому он может читать файлы .map и .jdbg (также файлы отладки .dbg и .pdb Windows-библиотек Windows), а также внутренние разделы JCLDEBUG (встроенный файл .jdbg). в одном .exe). Поэтому вы должны как минимум создать .exe с подробным (!) Файлом карты, см. «Параметры проекта» -> «Компилятор» -> «Связывание».