我正在 vs 2008 中调试一个程序。 有一个带有线程 ID 的线程列表。 我可以使用任何方法或工具来识别给定线程 ID 的父线程吗? 谢谢。
没有API(至少是标准的和有记录的)来获取给定线程的创建者线程ID。 Performance Monitor、Visual Studio IDE、Process Explorer 和 Spy++ 均不提供此信息。一旦启动,线程就不再依赖于它的创建者,而是独立运行;没有特别的亲子关系。
我不认为你能做到这一点,但我无法给你很好的解释。只是从来没有听说过它可能。我查看了 Process Explorer,它只能给你起始地址,但我怀疑你能否从中推断出父线程 ID。
如果您需要在应用程序中执行此操作,那么实现起来应该不会很困难,也许甚至可以挂钩系统函数来执行此操作,但如果 SysInternals 没有执行此操作,那么这可能是不可能的。
我认为 Spy++ (它称为间谍xx.exe,位于我的计算机上的 C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools 中)会提供此类信息,但这很困难,但我确信 sys内部提供了更好的流程信息版本
您在寻找编程方式还是外部工具? 如果是后者,请尝试 processExplorer。您可以从 MS 免费下载它,它为您提供了线程线程层次结构以及许多其他很酷的东西。
Visual Studio 从 VS 2017 版本开始在调试器中提供了一个 Parallel Stacks 窗口,可以很好地可视化所有线程的父子关系。