windbg在dll函数调用级别调试outlook addin

时间:2014-10-24 16:43:34

标签: .net windows dll outlook windbg

我的MS Outlook 2010中有第三方插件,而且执行速度非常慢。我需要弄清楚确切的瓶颈在哪里。我所知道的是,当我点击插件按钮时,插件由dll(s)组成,并且dll中的函数被调用。我使用反编译工具来分解DLL以查看里面的类文件。但是,该项目太庞大了,我发现很难跟踪其中的函数调用。 所以,我想如果我可以使用WinDBG在调试模式下跟踪函数调用。因此,我在windbg中打开了outlook.exe,在dbg命令窗口中,我给出了命令'g'来开始调试。之后,我使用了outllook中的插件来完成我的工作。但是,在windbg调试控制台中,我没有看到任何记录调用dll的条目,而且,dll中发生的函数调用也没有列出。我得到这样的日志:

(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
ModLoad: 74620000 74645000   C:\Windows\system32\POWRPROF.DLL
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
.
.
.
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): C++ EH exception - code e06d7363 (first chance)
(6dc.1064): Unknown exception - code e0000002 (first chance)
ReminderQueue: ProcessNotification: TABLE_ROW_ADDED
New reminder: Subject == test dbg ApptStartTime: Tue 10/28/2014 10:30 PM, Reminder Trigger: Tue 10/28/2014 10:15 PM
ReminderQueue: ProcessNotification: End<-----

上面日志中列出的dll不是我要调试的第三方DLL。我不知道为什么它没有被列出,当我使用它时,调试开启。我在这里缺少什么?

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:3)

我在您的方法中看到以下问题:

  • WinDbg在进行性能分析方面并不是很好。它很好地分析异常和崩溃。您可能需要一个性能分析器,如WPA
  • WinDbg也不太擅长查看调用哪些方法。它可以在某个时间点显示callstack,但不能在 时间内记录它们。您可能需要一个API记录器,例如Rohitab API monitor
  • 由于它是关于第三方加载项,因此您可能无法获取符号(如果开发人员未提供)。这意味着你无法获得方法的名称。因此,即使您发现了瓶颈,也无法为其命名。
  • 毕竟,当你发现瓶颈时你会怎么做?由于您没有源代码,因此您可能无法更改以使其更快。

答案 1 :(得分:0)

我可能会使用ProcessMonitor和ProcessExplorer来查看缓慢执行的操作。使用后者,您可以找到哪些线程正在占用CPU,而前者可以看到该进程正在执行的IO操作可能需要很长时间。您可以将它与不运行插件的Outlook运行进行比较,以查看正常情况。