Что такое приборостроение? - PullRequest
24 голосов
/ 12 марта 2010

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

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

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

Ответы [ 5 ]

14 голосов
/ 12 марта 2010

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

  • Переписывание 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, который может захотеть получить доступ к блокировке который удерживается потоком, который вы только что приостановили - вы не хотите этого делать, вы получите тупик. Вы также должны проверить, выполняет ли какой-либо другой поток этот метод, потому что, если это так, вы не можете изменить его.

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

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

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

6 голосов
/ 12 марта 2010

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

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

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

4 голосов
/ 04 февраля 2015

выдержка из википедии статья

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

4 голосов
/ 12 марта 2010
Инструментарий

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

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

0 голосов
/ 08 октября 2018

Что бы ни говорила Википедия, не существует стандартного / широко согласованного определения для кодового инструментария в ИТ-отрасли.

Пожалуйста, учтите, контрольно-измерительный прибор это существительное, производное от инструмента , которое имеет очень широкое значение.

" Код " - это тоже все в ИТ, я имею в виду - данные, услуги, все.

Следовательно, инструментарий кода - это набор приложений, который настолько широк ... не стоит давать ему отдельное имя; -).

Возможно, поэтому эта статья в Википедиитолько заглушка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...