我有一个使用 VisualStudio 2015(更新 2)开发的 C++ 应用程序。
使用 AMD Code XL 进行分析表明,该程序几乎 20% 的时间都花在了RtlUpcaseUnicodeToMultiByteN
来自模块的函数中ntdll.dll
。显然它将 unicode tsrings 转换为大写。
因为花这么多时间这样做是没有意义的,所以我需要知道谁在调用这个函数。事实证明这并不容易。
我想要做的是设置一个断点,然后查看调用堆栈。但是,如果没有源代码,我无法以通常的方式设置它。
我试过 Windbg,但堆栈跟踪基本上没用。
然后我发现有一种方法可以在 VisualStudio 中设置“函数断点”;但程序从未中断;即使“模块”窗口显示ntdll.dll
为“已加载符号”状态。
我还能做什么?