使用 ProcessExplorer 查看 Delphi/C++ Builder 的线程调用栈

ProcessExplorer 可以查看运行中进程的各种信息,包括特定线程的堆栈信息。这在我们程序出现死循环或者无响应时等问题时,除了在客户机器上重装一套环境或Remote Debugger 之外(吐槽下 PAServer/RemoteDebugger 在 Windows 下真心不太好用),另外一种在客户机器上能够找到对应的调用栈信息的好选择。

不幸的是,ProcessExplorer 不支持 Delphi 自身的 map 文件格式或者是 jdbg 等格式,所以我们需要一个工具,将 map 文件转换为 ProcessExplorer 支持的 dbg 格式。

第一步:我们需要设置生成详细的 map 文件,在工程选项中选择 Linking,打开 Map file 修改为 Detail:

第二步:我们需要使用下面的 map2dbg 工具,在命令行调用生成 .dbg 文件。

map2dbg 你的可执行文件名

第三步:将生成的 .dbg 文件和可执行文件放在同一个目录下。

第四步:在程序出现问题时,在 ProcessExplorer 中双击自己的进程,然后进入 Threads 页面,选择目标线程,然后点击 Stack 按钮,就可以查看指定线程当前的调用栈情况,此时你进程里对应的 Delphi 函数地址信息就一目了然了。

嗯,此处图片与 Delphi 无关,只是找一个示意一下。

好了,祈祷程序永无 Bug!!

分享到: