2013-08-01 3 views
15

Я пытаюсь использовать веб-приложение ASP.NET с Visual Studio 2012, .NET 4. Решение содержит веб-приложение и библиотеку классов. Проблема в том, что я не могу видеть, шаг в библиотеку классов, я получаю сообщение о том:Профилирование производительности Visual Studio - символы библиотеки классов не найдены

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

Вы нашли решение? Я тоже застрял на этом. Есть еще несколько подобных вопросов SO, но нет ответов [здесь] (http://stackoverflow.com/questions/9609300/cant-collect-instrumentation-profiler-data-for-dll-in-visual-studio-2010) и [здесь] (http://stackoverflow.com/questions/13240084/how-to-profile-only-a-class-library) – Ilan

+0

Ух, нет, я опубликовал это только 3 дня назад ...: -/ – kipusoep

ответ

13

насколько я могу сказать от вашего решения, в .dll, который будучи инструмент находится в папке «obj» библиотеки классов.

Теперь это может быть только я, когда я должен держать язык за зубами (потому что я мало разбираюсь в профилировщике Visual Studio, и я понятия не имею, почему/если бы кто-то хотел бы использовать двоичные файлы «obj», а не «bin»), и поэтому я думаю, что лучше описать мой ход мысли:

VS ищет файлы символов (файл .instr.pdb) в разделе «Временные файлы ASP.NET» , потому что там загружается библиотека библиотеки классов. Однако он не найдет его, потому что этот файл создается в obj \ Debug в проекте библиотеки классов и не скопирован в папку «bin» веб-приложения, поэтому он никогда не получает тень, скопированную в «Временные файлы ASP.NET», или.

Удаление целей из Проводника Performance и выбрав пункт «Добавить Project Target», проверяя оба проекта, но дает мне именно то, что вы (и я) имел в своем распоряжении:

  • PerformanceTest.dll в веб-приложений проект в .. . \ Bin \ Debug
  • SomeLibrary.dll в проект библиотеки классов в ... \ OBJ \ Debug

Таким образом, очевидно, что это как VS хочет быть, работает ли он или нет. Он использует библиотеку классов в obj \ Debug, а затем забывает все о вновь созданных символах при запуске профилировщика.

Но если вместо этого я удаляю «SomeLibrary.dll ", выберите« Добавить целевой двоичный файл ... »и вручную выберите файл в веб-приложении ... \ bin \ Debug ... И затем начните профилирование: отчет выглядит примерно таким же, но я могу просматривать «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, чтобы он включался в теневую копию в ASP.NET Temporary Файлы

+0

Спасибо JimmiTh. Я не знаю, правильно ли это исправить, но это работает, и это именно то, о чем я просил, спасибо! – kipusoep

1

Я успешно удалось профиль моей библиотеки классов - но только из консольного приложения. Я не смог профилировать библиотеку классов во время сеанса профилирования производительности приложений ASP.NET.

Некоторые сортированных ссылки - которые, увы, не решить мою проблему, но может дать вам некоторые выводы:

  • Запустите Developer Command Prompt for VS2012
  • Затем вы можете использовать это, чтобы VSPerfReport <yourreport.vsp> /debugsympath, чтобы выяснить, где SomeLibrary.dll должно быть загружен из
  • советов по устранению неисправностей http://msdn.microsoft.com/en-us/library/bb385766.aspx
4

У меня была эта проблема в VS2014 с exe, которая была создана для «Any CPU» с настройкой «Предпочитайте 32 бит», тогда как в библиотеках с ссылками не было «Предпочитайте 32 бит» (т.е. 32-разрядная версия, 64-разрядные библиотеки).

Изменение exe, чтобы не «предпочитать 32-битный», устранило проблему с символами, я думаю, это потому, что библиотеки модифицированы, чтобы соответствовать битте exe (во время инструментария), и символы больше не совпадают.

3

Это решение работает для меня:

http://www.brothersincode.com/post/Matching-symbols-could-not-be-found-Performance-Profiler.aspx

Вы также можете попробовать это наоборот, то есть удаление библиотеки DLL, как это и пытается поставить один из бен причины, которые могут могли бы также быть наоборот.

0

Ответ на данный вопрос помог мне добраться туда, но я попытаюсь смиренно дать немного более простые инструкции тем, кто пытается выполнить то же самое, что и я, на всякий случай, если бы я спал пару из-за трудных поисковых запросов для кого-то. Я безуспешно пытался профилировать службу WCF, которая использует внешние сборки, которые загружаются отражением во время выполнения, и эта служба запускается моим пользовательским клиентом. У меня было 2 проблемы: моя служба WCF просто не начиналась вообще во время сеанса профилирования (но при отладке она всегда это делала), а затем, когда это было сделано по какой-то причине, Visual Studio не загружала символы для внешних сборок. Итак, чтобы получить обе вещи на работу, мне нужно было создать сеанс производительности инструментария с целевым назначением на мою главную службу WCF вместе с пользовательскими внешними сборками и установить режим запуска - Internet Explorer (иначе служба не запустится). Отсутствует exes или указывает на клиента из решения. Затем я не начал профайлер немедленно, но изменил его свойства в окне «Проводник производительности» и добавил двоичный файл моего пользовательского клиента на вкладку «Запуск», которая будет запущена 2-го (сразу после того, как служба будет действовать). Это также помогло получить правильную «ссылку на службу» прямо в клиенте (я ее не использую, я использую совместную сборку и генерирую каналы с использованием ChannelFactory) и сначала запускаю клиент в режиме отладки (но без фактического доступа к службе). Возможно, это неправильный способ сделать это, но это делает трюк, и я, наконец, смогу профилировать свой сервис после 2 дней поиска в Интернете - не так много документов, доступных по этой теме, и принятый ответ на этот вопрос stackoverflow - лучший ресурс I найденный.

Смежные вопросы