我正在尝试使用Visual Studio 2012,.NET 4来检测ASP.NET Web应用程序。 该解决方案包含一个Web应用程序和一个类库。 问题是我看不到步骤进入类库,我收到一条消息说明:
Matching symbols could not be found. Choose the 'Symbol Settings...' link to add the symbol file location and then reload the report.
分析时的输出看起来很好:
Preparing web server for profiling.
Profiling started.
Instrumenting C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\\bin\PerformanceTest.dll in place
Info VSP3049: Small functions will be excluded from instrumentation.
Microsoft (R) VSInstr Post-Link Instrumentation 11.0.50727 x86
Copyright (C) Microsoft Corp. All rights reserved.
File to Process:
C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\bin\PerformanceTest.dll --> C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\bin\PerformanceTest.dll
Original file backed up to C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\bin\PerformanceTest.dll.orig
Successfully instrumented file C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\bin\PerformanceTest.dll.
Warning VSP2013: Instrumenting this image requires it to run as a 32-bit process. The CLR header flags have been updated to reflect this.
Instrumenting C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\SomeLibrary\obj\Debug\SomeLibrary.dll in place
Info VSP3049: Small functions will be excluded from instrumentation.
Microsoft (R) VSInstr Post-Link Instrumentation 11.0.50727 x86
Copyright (C) Microsoft Corp. All rights reserved.
File to Process:
C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\SomeLibrary\obj\Debug\SomeLibrary.dll --> C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\SomeLibrary\obj\Debug\SomeLibrary.dll
Original file backed up to C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\SomeLibrary\obj\Debug\SomeLibrary.dll.orig
Successfully instrumented file C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\SomeLibrary\obj\Debug\SomeLibrary.dll.
Warning VSP2013: Instrumenting this image requires it to run as a 32-bit process. The CLR header flags have been updated to reflect this.
Launching web server with profiling.
Launching profilable project.
Warning VSP2355: Some Windows counters will not be collected. Without this data, some performance rules may not fire.
Profiling process ID 68 (iisexpress).
Process ID 68 has exited.
Data written to C:\Users\kipusoep\Documents\InfoCaster\svn\instances\PerformanceTest\PerformanceTest_130801(1).vsp.
Profiling finished.
Loaded symbols for C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\0329cb19\89f716fc\App_Web_0slsprtu.dll.
Loaded symbols for C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\0329cb19\89f716fc\assembly\dl3\62c5c0d2\9777513f_ae8ece01\PerformanceTest.dll.
Profiling complete.
我注意到输出结尾没有说明有关名为'SomeLibrary'的类库的任何内容,其中显示了“已加载符号”。
有谁知道为什么我不能检测类库?
以下是VS解决方案:http://www.fileswap.com/dl/C9HPd8uEC/
答案 0 :(得分:13)
据我所知,您的解决方案中,正在检测的.dll位于类库的“obj”文件夹中。
现在,这可能就是我说话时我应该闭嘴(因为我对Visual Studio探查器没什么了解,我不知道为什么/如果有人想要“obj”二进制文件而不是“ bin“),因此,我想我最好描述一下我的思路:
VS正在“ASP.NET临时文件”位置查找符号文件(特别是.instr.pdb文件),因为它是从中加载类库dll的地方。但它找不到它,因为该文件是在类库项目的obj \ Debug中创建的,而不是复制到Web应用程序的“bin”文件夹中 - 因此它永远不会将阴影复制到“ASP.NET临时文件”任
从Performance Explorer中删除目标并选择“添加项目目标”,检查这两个项目,确切地告诉我你(和我)以前拥有的内容:
显然,这就是VS想要它的方式,无论它是否有效。它在obj \ Debug中检测类库,然后在启动分析器时忘记新生成的符号。
但是如果我再次删除“SomeLibrary.dll”目标,请选择“添加目标二进制文件...”并手动选择Web应用程序中的一个... \ bin \调试...然后开始分析:报告看起来大致相同,但我可以浏览“SomeLibrary”,我在输出中得到这个:
Preparing web server for profiling.
Profiling started.
Instrumenting E:\...\PerformanceTest\\bin\PerformanceTest.dll in place
Info VSP3049: Small functions will be excluded from instrumentation.
Microsoft (R) VSInstr Post-Link Instrumentation 11.0.50727 x86
Copyright (C) Microsoft Corp. All rights reserved.
File to Process:
E:\...\PerformanceTest\bin\PerformanceTest.dll -->
E:\...\PerformanceTest\bin\PerformanceTest.dll
Original file backed up to E:\...\PerformanceTest\bin\PerformanceTest.dll.orig
Successfully instrumented file E:\...\PerformanceTest\bin\PerformanceTest.dll.
Warning VSP2013: Instrumenting this image requires it to run as a
32-bit process. The CLR header flags have been updated to reflect this.
Instrumenting E:\...\PerformanceTest\bin\SomeLibrary.dll in place
Info VSP3049: Small functions will be excluded from instrumentation.
Microsoft (R) VSInstr Post-Link Instrumentation 11.0.50727 x86
Copyright (C) Microsoft Corp. All rights reserved.
File to Process:
E:\...\PerformanceTest\bin\SomeLibrary.dll -->
E:\...\PerformanceTest\bin\SomeLibrary.dll
Original file backed up to E:\...\PerformanceTest\bin\SomeLibrary.dll.orig
Successfully instrumented file E:\...\PerformanceTest\bin\SomeLibrary.dll.
Warning VSP2013: Instrumenting this image requires it to run as a
32-bit process. The CLR header flags have been updated to reflect this.
Launching web server with profiling.
Launching profilable project.
Profiling process ID 14652 (iisexpress).
Process ID 14652 has exited.
Data written to E:\...\PerformanceTest\PerformanceTest_130810(1).vsp.
Profiling finished.
Loaded symbols for
C:\...\App_Web_yzwcgfbx.dll.
Loaded symbols for
C:\...\assembly\dl3\928eb82e\75dbb6f1_5695ce01\PerformanceTest.dll.
Loaded symbols for
C:\...\assembly\dl3\6c0d460d\5208c7f1_5695ce01\SomeLibrary.dll.
Profiling complete.
这是解决问题的正确方法吗?我再也不知道了。如果没有,可能有一种方法可以让分析器在类库的obj文件夹中查找符号,当它找不到它所期望的位置时 - 或者将.instr.pdb文件复制到bin文件夹的方法-profiling,以便它包含在ASP.NET临时文件的卷影副本中。
答案 1 :(得分:4)
我在VS2014中遇到了这个问题,这个问题是为#34;任何CPU"用"首选32位"设置,而引用的库没有"首选32位" (即32位exe,64位库)。
将exe更改为not"更喜欢32位"用符号修复问题,我认为这是因为修改了库以匹配exe的位数(在检测期间)并且符号不再匹配。
答案 2 :(得分:3)
这个解决方案对我有用:
http://www.brothersincode.com/post/Matching-symbols-could-not-be-found-Performance-Profiler.aspx
你也可以反过来尝试它,这意味着删除你的dll并试图把它放在bin中,因为这可能是另一种方式。
答案 3 :(得分:1)
我已成功设法配置我的类库 - 但仅限于在控制台应用程序中。我无法在ASP.NET应用程序性能分析会话期间分析类库。
一些各种各样的链接 - 唉不能解决我的问题,但可能会给你一些线索:
Developer Command Prompt for VS2012
VSPerfReport <yourreport.vsp> /debugsympath
找出应该从哪里加载SomeLibrary.dll 答案 4 :(得分:0)
目前接受的答案帮助我实现了目标,但是我会谦卑地向那些试图完成与我完全相同的事情的人提供一些更直接的指示,以防我保存一个对于某人来说,几分苦苦挣扎。 我尝试配置使用外部程序集的WCF服务时未成功,外部程序集在运行时由反射加载,并且我的自定义客户端会触发此服务。我遇到了两个问题:我的WCF服务在分析会话期间根本没有启动(但是在调试它时总会这样做),然后当它出于某种原因时 - Visual Studio coulndn没有加载符号用于外部组件。 因此,为了使两件事都能工作,我需要创建一个检测性能会话,目标设置为我的主WCF服务以及自定义外部程序集,并设置启动模式 - Internet Explorer(否则服务不会启动)。没有exes或从解决方案指向客户端。然后我没有立即启动分析器,而是在&#34; Performance Explorer&#34;中修改了它的属性。窗口并将我的自定义客户端的二进制文件添加到&#34; Launch&#34;选项卡2-nd(在服务之后)。它还有助于提供适当的服务参考&#34;在客户端(我没有真正使用它,我使用共享程序集并使用ChannelFactory生成通道)并首先以调试模式启动客户端(但实际上没有访问过服务)。也许这不是正确的方法,但它可以解决这个问题,我最终可以在谷歌搜索2天之后对我的服务进行分析 - 关于这个主题的文档不是很多,并且这个stackoverflow问题的接受答案是我找到的最好的资源。
答案 5 :(得分:0)
我正在使用Visual Studio 2019,并在对ASP.NET网站进行性能分析时偶然发现了同一问题。
受以上JimmiTh solution的启发,我将缺少项目的[ProjectPath] / obj / Debug路径添加到VS Options-> Debugging-> Symbols中。重新分析后,我可以轻松访问源代码并获得更准确的分析诊断。