gpt4 book ai didi

c++ - 发现在我的 C++ 应用程序中创建线程的原因及其作用的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 09:42:46 27 4
gpt4 key购买 nike

我正在审核在 Windows 上运行的 C++ 应用程序,该应用程序是针对多线程调试 DLL 编译的。它有很多可以产生线程的第三方依赖项。我需要跟踪每个线程存在的原因以及它分配了多少堆栈空间。

有什么好方法可以追溯到线程创建的开始,以便我可以看到线程的生成位置?

更新:我应该指出,我有整个应用程序的源代码,不依赖于 Microsoft 依赖项。然而,许多线程的调用堆栈仅存在于操作系统附带的库中,例如 ntdll.dll 和 kernel32.dll。

最佳答案

您可以使用 Windows Performance Toolkit查看 ThreadCreate 事件。在 Vista 上,您可以获得每个线程创建的堆栈,因此您可以看到哪些代码正在创建线程。

通过以下方式收集跟踪:

xperf -on base -stackwalk ThreadCreate 

运行你的场景,写出跟踪:

xperf -stop -d mylog.etl

查看跟踪文件:

xperf mylog.etl

在 Trace 菜单选项中,适本地设置符号路径并加载符号。您可以使用 Microsoft Symbol Server获取操作系统的公共(public)符号。

在“Process Lifetimes”下,右键单击并选择“Thread Summary Table”。您可以为创建堆栈和用户堆栈大小添加列。展开您的进程,您可以看到已创建的所有线程、创建该线程的堆栈以及堆栈大小。

关于c++ - 发现在我的 C++ 应用程序中创建线程的原因及其作用的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1494254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com