Подтвердить что ты не робот

Что такое приборы?

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

Это просто более общий класс инструментов и действий по регистрации/мониторингу?

Просьба указать пример кода/сценарии, когда/как следует использовать прибор.

4b9b3361

Ответ 1

Я пишу инструменты, которые выполняют инструменты. Итак, вот что я думаю.

  • Перезапись DLL. Это то, что делают такие инструменты, как Purify и Quantify. В предыдущем ответе на этот вопрос говорилось, что они послекомпилируют/связывают инструмент. Это неверно. Очистить и квантифицировать инструмент DLL в первый раз, когда он выполняется после цикла компиляции/ссылки, затем кэшировать результат, чтобы его можно было использовать быстрее в следующий раз. Для больших приложений профилирование DLL может занять много времени. Это также проблематично - в компании, с которой я работал в период с 1998 по 2000 год, у нас было большое 2-миллионное линейное приложение, которое потребовало бы 4 часов на инструмент, а 2 из DLL случайно разбились бы во время инструментария, и если либо вы не смогли бы удалить оба они, затем начните.

  • На месте приборы. Это похоже на переписывание DLL, за исключением того, что DLL не изменяется и изображение на диске остается нетронутым. Функции DLL соответствующим образом подключаются к задаче, требуемой при первой загрузке DLL (либо во время запуска, либо после вызова LoadLibrary (Ex). В библиотеке Microsoft Detours вы можете увидеть методы, подобные этому.

  • На лету. Как и на месте, но только на самом деле инструменты метода при первом запуске метода. Это сложнее, чем на месте, и откладывает штраф за инструментальную обработку до тех пор, пока первый метод не встретится. В зависимости от того, что вы делаете, это может быть хорошо или плохо.

  • Инструментарий промежуточного языка. Это то, что часто делается с Java и .Net-языками (C ~, VB.Net, F # и т.д.). Язык компилируется на промежуточный язык, который затем выполняется виртуальной машиной. Виртуальная машина предоставляет интерфейс (JVMTI для Java, ICorProfiler (2) для .Net), который позволяет вам отслеживать, что делает виртуальная машина. Некоторые из этих параметров позволяют вам изменить промежуточный язык непосредственно перед его компиляцией в исполняемые инструкции.

  • Промежуточное инструментальное оборудование посредством отражения. Java и .Net предоставляют API-интерфейсы отражения, которые позволяют обнаруживать метаданные о методах. Используя эти данные, вы можете создавать новые методы "на лету" и применять существующие методы так же, как и ранее упомянутые инструменты промежуточного языка.

  • Компиляция времени. Этот метод используется во время компиляции для вставки соответствующих инструкций в приложение во время компиляции. Не часто используемая функция профилирования Visual Studio предоставляет эту функцию. Требуется полная перестройка и ссылка.

  • Инструментарий исходного кода. Этот метод используется для изменения исходного кода для вставки соответствующего кода (обычно условно скомпилированного, чтобы вы могли отключить его).

  • Инструмент времени соединения. Этот метод действительно полезен только для замены распределителей памяти по умолчанию на распределители трассировки. Ранним примером этого был детектор утечки памяти Sentinel на Solaris/HP в начале 1990-х годов.

Различные методы измерения на месте и на лету чреваты опасностью, так как очень сложно безопасно остановить все потоки и изменить код, не рискуя потребовать вызова API, который может захотеть получить доступ к блокировке который удерживается нитью, которую вы только что приостановили, - вы не хотите этого делать, вы получите тупик. Вы также должны проверить, выполняет ли какой-либо из других потоков этот метод, потому что если вы не можете его изменить.

Методы инструментов на основе виртуальной машины гораздо проще использовать, так как виртуальная машина гарантирует, что вы можете безопасно модифицировать код в этой точке.

  • (EDIT - этот элемент добавлен позже). Это включало изменение таблицы импорта данных для функций, связанных с другими DLL/Shared Libraries. Этот тип приборов, вероятно, является самым простым методом для работы, вам не нужно знать, как разбирать и модифицировать существующие двоичные файлы, или делать то же самое с кодами операций виртуальной машины. Вы просто исправляете таблицу импорта со своим собственным адресом функции и вызываете реальную функцию с вашего крючка. Используется во многих коммерческих и открытых инструментах.

Я думаю, что я их охватил, надеюсь, что это поможет.

Ответ 2

Это общий термин для того, чтобы что-то делать с вашим кодом, необходимым для дальнейшего анализа.

Специально для таких языков, как C или С++, существуют такие инструменты, как Purify или Quantify, использование памяти профилей, статистика производительности и т.п. Чтобы эти программы профилирования работали правильно, необходим "инструментальный" шаг для вставки счетчиков, проверок границ массивов и т.д., Которые используются программами профилирования. Обратите внимание, что в сценарии Purify/Quantify инструментарий выполняется автоматически как шаг после компиляции (на самом деле это дополнительный шаг к процессу компоновки), и вы не трогаете исходный код.

Некоторые из них менее необходимы для динамического или виртуального кода (например, для Java доступны инструменты профилирования, такие как OptimizeIt, которые делают многое из того, что делает Quantify, но специальной привязки не требуется), но это не отрицает концепцию.

Ответ 3

Инструмент

обычно используется при анализе динамического кода.

он отличается от ведения журнала, поскольку инструментарий обычно выполняется автоматически с помощью программного обеспечения, а для ведения журнала требуется человеческий интеллект для вставки кода ведения журнала.

Ответ 4

Выдержка из wikipedia статья

В контексте компьютерного программирования инструментария относится к способность контролировать или измерять уровень производительности продукта, диагностировать ошибки и записывать информацию о трассировке. Программисты реализуют инструментария в виде кодовых инструкций, которые контролируют конкретные компоненты в системе (например, инструкции могут выводить протоколирование информация появится на экране). Когда приложение содержит инструментального кода, его можно управлять с помощью инструмента управления. Инструментарий необходим для обзора эффективности выражение. Подходы к инструментам могут быть двух типов: источник приборы и бинарные приборы.