4

有谁知道我可以对我的 Windows 边栏小工具进行代码分析的方法?

我玩过 IE8 的“开发者工具”中的代码分析工具和 Visual Studio 2010 中包含的代码分析工具,但我找不到包含 我的小工具所依赖的System.*API的方法(因为它是边栏环境中的标准)。该小工具还依赖于跨域 AJAX 请求;这通常在侧边栏环境中是允许的。

通过代码分析,我主要是指:

  • 函数调用次数
  • 函数执行时间

我使用 Visual Studio 2010 和性能向导尝试了以下操作:

  • 使用“仪器”模式并选择“一个 ASP.NET 或 JavaScript 应用程序”。但是,该小工具在 Internet Explorer 而不是 Windows 边栏中打开
  • 使用“Instrumentation”模式并选择“An executable”选项,然后选择 Sidebar.exe。但是,我收到错误“错误 VSP1030: Invalid, mismatched, or no PDB file was found for C:\Users\Matt\Desktop\Windows Sidebar\sidebar.exe
  • 使用“CPU 采样”模式并选择“一个 ASP.NET 或 JavaScript 应用程序”。但是,该小工具在 Internet Explorer 而不是 Windows 边栏中打开

使用“分析”->“探查器”菜单中的“附加到进程”选项时,我可以成功附加到 sidebar.exe 进程,但探查器返回有关实际侧边栏进程的数据,而没有关于我的小工具的信息。

我的小工具没有项目/解决方案文件。

问候, 马特

4

1 回答 1

2

我是 VS Profiler 团队的一员,因此请随时提出任何澄清问题。

如果您想要准确的指标(执行时间、调用次数),那么您应该使用检测。通过检测,分析器将向您显示您检测的任何二进制文件以及一级被调用者的数据(例如,如果您string.Concat直接从检测的二进制文件中调用,分析器将显示您调用它的次数和时间(总计)电话接听)。探查器不会向您显示您未检测的二进制文件的数据。

您是否尝试过仪器分析?你看到什么样的数据?

如果需要,您还可以尝试使用统计方法进行分析:抽样。采样比插装更轻量级,并且通常可以很好地作为第一次通过,从高层次上找出 CPU 工作最多的地方。通过采样,分析器以指定的时间间隔拍摄调用堆栈的快照(这类似于闯入调试器以查看当前正在执行的内容)。然后它聚合快照以创建调用树。

如果您让我更好地了解您如何尝试配置文件,我可以为您提供更多帮助。您是使用 VS 还是命令行的分析器?您的侧边栏小工具有 VS 解决方案/项目吗?

您还可以查看我们的博客或我们的MSDN 文档以获取更多信息。


更新

分析器的 JavaScript 分析功能主要针对 IE8,所以我不确定它是否会针对另一个进程(例如 sidebar.exe)收集数据,该进程(我假设)托管 IE JavaScript 引擎。尽管如此,您至少应该能够使用探查器来收集针对您的托管代码的数据。

对于 Instrumentation,您将需要使用第二个选项(“可执行文件”),并且在 Performance Explorer 中,您将需要两个目标:

  1. sidebar.exe,检测(因为您没有 PDB) - 您可以右键单击目标并取消选中“检测”选项以禁止检测
  2. foo.dll(无论您的 Gadget DLL 被称为什么),已检测 - 您可能必须手动添加此目标(右键单击 Targets 文件夹,选择“添加目标二进制文件...”),但请务必启用“Instrument " 选项并确保其 PDB 位于其旁边

要了解有关性能目标的更多信息,请参阅此博客文章。使用此设置,只需单击“开始分析”按钮。Instrumentation 应该会成功,并且您应该获得 Gadget 的跟踪分析数据。

对于采样,您可以启动或附加到流程。仅在以下情况下附加到流程才有效:

  • 该进程在 v4 CLR 上运行;或者
  • 该进程设置了正确的分析环境变量(请参阅下文了解这意味着什么)

分析 pre-v4 CLR 进程需要在目标进程中设置一些环境变量。本质上,您需要终止 sidebar.exe 进程,然后使用分析器的命令行工具重新启动它。MSDN上提供了如何执行此操作的演练。

另一个选项,采样启动,可以从命令行(再次参考 MSDN 文章)或从 VS UI 完成。选择“CPU采样”和“可执行文件(.EXE文件)”,然后关闭所有当前正在运行的sidebar.exe实例,在性能资源管理器中右键单击新创建的目标,选择“属性”,然后修改命令-line 参数根据需要。然后启动分析器应该可以工作。

如果您遇到更多问题,请告诉我。抱歉,这并不容易。

于 2010-05-19T00:26:43.147 回答