RU2390821C1 - Способ динамической инструментации - Google Patents

Способ динамической инструментации Download PDF

Info

Publication number
RU2390821C1
RU2390821C1 RU2008141835/09A RU2008141835A RU2390821C1 RU 2390821 C1 RU2390821 C1 RU 2390821C1 RU 2008141835/09 A RU2008141835/09 A RU 2008141835/09A RU 2008141835 A RU2008141835 A RU 2008141835A RU 2390821 C1 RU2390821 C1 RU 2390821C1
Authority
RU
Russia
Prior art keywords
information
program
variable
debugging information
debugging
Prior art date
Application number
RU2008141835/09A
Other languages
English (en)
Inventor
Алексей Анатольевич Геренков (RU)
Алексей Анатольевич Геренков
Леонид Владимирович Комков (RU)
Леонид Владимирович КОМКОВ
Original Assignee
Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд."
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." filed Critical Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд."
Priority to RU2008141835/09A priority Critical patent/RU2390821C1/ru
Application granted granted Critical
Publication of RU2390821C1 publication Critical patent/RU2390821C1/ru

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

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

Description

Изобретение относится к области вычислительной техники, а именно к способам динамической инструментации, и может быть применено во встроенных системах для инструментации тел функций программы, выполняемой в системе, с целью точного мониторинга поведения системы или как отдельный модуль для сбора полной информации о глобальных структурах, аргументах функций, возвращаемых значениях и локальных переменных в каждой точке выполнения функции во время выполнения программы в системе.
В общепринятых способах трассировки данных, обрабатываемых во время выполнения программы, используют программный код, печатающий отладочную информацию, который разработчики вставляют в исходный текст программы, чтобы понять поведение программы. Однако в таком способе программу необходимо перекомпилировать, а это требует времени.
Другие способы, а именно способы, основанные на динамической инструментации, позволяют собирать информацию во время выполнения программы без ее перекомпиляции и перезапуска, что существенно уменьшает время разработки. Некоторые существующие технологии динамической инструментации не позволяют собирать информацию о локальном контексте выполнения программы, например такие данные, как значения локальных переменных, а другие способы, позволяющие собирать такие данные, предъявляют к ресурсам системы требования, которые могут быть неприемлемыми для встроенных систем.
Исполняемый бинарный код является надежным источником информации о содержимом и поведении программы. Компиляция, линковка и оптимизация программы может привести к появлению существенных отличий в поведении программы от ее исходного кода. Способ, который позволяет получить информацию о переменных в программе во время ее выполнения, используя только бинарный код, очень полезен. Он дает возможность анализировать поведение программы без рекомпиляции, что сокращает время разработки программы.
Как правило, существующие способы динамической инструментации позволяют собирать информацию о глобальных данных, аргументах функций и возвращаемых значениях, поскольку данная информация может быть получена из бинарного кода. Получение значений локальных переменных является более сложной задачей, поскольку при извлечении информации о локальной переменной из бинарного кода возникают некоторые проблемы, в случае когда информация для отладки изъята при высоком уровне оптимизации бинарного кода.
Существующие технологии динамической инструментации позволяют собирать информацию практически в каждой инструкции, но, несмотря на это, существует проблема идентификации переменной, сохраненной в регистре или на стеке. Другими словами, не сложно собрать полную информацию о выполнении программы, но сложно понять, что означает данная информация.
Если бинарный файл содержит отладочную информацию, то мы имеем достаточно информации о соответствии исходного кода бинарному коду. Таким образом, мы можем трассировать информацию о данных в программе, если мы имеем отладочную информацию в бинарном коде.
Если бинарный код не содержит отладочную информацию, при определении соответствия между исходным кодом и бинарным кодом для локальных переменных возникнут проблемы.
Существует серьезная проблема сбора информации из файлов с неполной бинарной информацией. Неполные бинарные файлы являются выполняемыми файлами без информации о местах нахождения, размерах и формате функций и объектов. Данная информация обычно содержится в генерируемых компилятором таблицах символов. Коммерческие программы, как правило, не содержат такой информации во избежание стороннего инженерного анализа и нелицензированного использования программ. Системные библиотеки и утилиты тоже зачастую не имеют такой информации, чтобы уменьшить требования к свободному пространству на диске.
Система Dynlnst (см., например, http://www.dyninst.org/) [1] позволяет генерировать и динамически вставлять куски бинарного кода в выполняющуюся программу. Она может трассировать глобальные и локальные переменные путем генерации и вставки трассирующего кода в программу. Недостаток системы [1] заключается в том, что для ее функционирования необходимо наличие отладочной информации в инструментизируемых бинарных файлах, что сильно увеличивает размер этих файлов.
Известен способ трассировки данных в программе, предложенный в патенте США № 5,870,606 [2], в котором для каждого подлежащего трассировке элемента данных предлагают использовать прокси-объекты. Прокси-объекты перехватывают сообщения, посланные программой этим элементам данных. Такой способ имеет следующие недостатки:
- Требует изменения исходного кода, перекомпиляции и перезапуска программы для выполнения трассировки.
- В связи с необходимостью использования специальных прокси-объектов данный способ дополнительно перегружает память. Это может быть неприемлемо для встроенных систем.
- Данный способ не применим для определения ситуаций, в которых переменную случайно перезаписывают неверным кодом (переполнение буфера и т.д.).
В другом патенте США (см. № 5,347,649) [3] предложен способ, заключающийся в том, что вставляют дополнительный код в функции обработки данных для трассировки изменений данных. Такой способ имеет следующие недостатки:
- Требует изменения исходного кода, перекомпиляции и перезапуска программы для выполнения трассировки.
- Сложно применить данный способ для трассировки данных основных типов, таких как 1, 2 и 4-байтные переменные.
- Данный способ не применим для определения ситуаций, в которых переменную случайно перезаписывают неверным кодом (переполнение буфера и т.д.).
Наиболее близким к заявленному изобретению является способ трассировки данных в программе, который описан в патенте США № 6,769,117 [4]. Этот способ основан на динамической инструментации, что позволяет собирать аргументы и возвращаемые значения функций ядра, а также информацию о глобальных структурах ядра. Однако он не обеспечивает возможности сбора информации о локальных переменных.
Предложенный способ позволяет заменить метод вставки отладочного вывода, поскольку в нем собирают всю информацию о выполнении программы в любой момент ее выполнения. Предложенный способ позволяет осуществлять мониторинг следующих бинарных файлов:
- файлов с отладочной информацией;
- файлов без отладочной информации;
- файлов с неполной бинарной информацией.
Задача, на решение которой направлено заявляемое изобретение, состоит в разработке усовершенствованного способа динамической инструментации, позволяющего собирать информацию о локальном контексте выполнения программы из функций во время выполнения программы. При этом собираемая информация должна включать в себя следующие данные: глобальные структуры, аргументы функций, возвращаемые значения, локальные и глобальные переменные.
Технический результат достигают за счет создания способа динамической инструментации в компьютерной системе, содержащей главную систему, связанную с устройством, по меньшей мере, один процессор, связанный с памятью, а также операционную систему, которая связана с процессором и выполнена с возможностью функционирования в пространстве ядра и выполнения операции по команде одной или нескольких пользовательских программ, при этом процессор выполнен с возможностью осуществления действий для выполнения процесса сохранения локальных переменных, путем сохранения их значений в регистрах или в стеке, в котором выполняют следующие операции:
- конфигурируют компьютерную систему;
- компилируют исследуемую программу с информацией об отладке в главной системе;
- вставляют контрольную точку при поступлении запроса мониторинга переменной по определенному адресу;
- переводят управление системы в режим ядра, когда при выполнении программы достигают контрольной точки;
- выполняют подпрограмму инструментации в пространстве ядра;
- считывают значение переменной, которое хранится в регистре процессора или в пространстве пользователя в памяти;
- пересылают значение переменной в программу трассировки;
- продолжают выполнение исследуемой программы;
при этом между операциями компиляции исследуемой программы и вставки контрольной точки дополнительно выполняют следующие операции:
- извлекают адрес и информацию о переменной из бинарного кода с отладочной информацией в главной системе, при этом отделяют отладочную информацию от бинарного кода и уменьшают объем отладочной информации путем выбора из нее только необходимой информации;
- посылают извлеченную информацию программе трассировки на устройстве, при этом пользователь передает извлеченную информацию об адресах инструкций (адреса контрольных точек), месте расположения переменных и их размерах по назначению, а программа трассировки, используя уменьшенную отладочную информацию, задает контрольные точки и собирает данные из бинарного кода без отладочной информации во время выполнения программы.
Как видно из вышеизложенного, основная идея заявляемого способа заключается в использовании отладочной информации для мониторинга бинарных файлов нескольких типов. Другими словами, в нем тем или иным образом получают отладочную информацию (например, отладочная информация может быть в отдельном файле) и затем осуществляют мониторинг файлов. В предложенном способе с помощью отладочной информации извлекают информацию о типах переменных программы, месте нахождения переменных, а также о соответствии между строками исходного кода и инструкциями бинарного кода, а затем получают информацию из бинарного кода во время выполнения программы.
Заявляемый способ динамической инструментации отличается от прототипа [4] уменьшенным объемом ресурсов (памяти) компьютерной системы, занимаемых при выполнении данного способа, за счет того, что для его выполнения не требуется отладочная информации инструментируемых бинарных файлов, а необходима только та отладочная информация, которая будет использована непосредственно для мониторинга программы, и с увеличенным быстродействием за счет того, что мониторинг программы производят во время ее выполнения и без перезагрузки системы.
Для функционирования заявляемого способа имеет смысл, чтобы уменьшали объем отладочной информации, выбирая из нее только необходимую информацию, а именно: адреса инструкции, которая соответствует строке исходного кода (контрольной точке), места расположения переменной (переменная может быть занесена в стек, регистр или память) и размер переменной.
Для функционирования предложенного способа имеет смысл, чтобы дополнительно уменьшали объем отладочной информации, выбирая из нее информацию по конкретному запросу пользователя (пользователь может запросить информацию о переменных с определенными именами).
Для лучшего понимания заявляемого изобретения далее приводится его подробное описание с соответствующими чертежами.
Фиг.1. Общая схема компьютерной системы для выполнения способа динамической инструментации согласно изобретению.
На данном чертеже показан общий вид системы, в которой может использоваться предложенный способ. Программу без отладочной информации пересылают на устройство, на котором она будет работать. Специальная программа извлекает необходимую отладочную информацию из бинарного файла с отладочной информацией. Извлеченную часть информации об отладке передают в программу трассировки на устройстве.
Фиг.2. Схема трассировки данных в способе динамической инструментации согласно изобретению.
На данном чертеже показана трассировка данных в программе. Пользователь передает в программу трассировки данные о месте расположения информации об отладке. Затем он указывает имя переменной и указывает, где должна осуществляться ее трассировка. Программа трассировки определяет адрес для трассировки и место расположения переменной и передает данную информацию в модуль инструментации. Модуль инструментации устанавливает контрольную точку. Когда программа достигает контрольной точки, вызывают хук модуля инструментации, который получает значение переменной и передает его в программу трассировки.
Фиг.3. Схема пошагового выполнения способа динамической инструментации согласно изобретению.
В общем случае заявляемый способ динамической инструментации выполняют следующим образом (Фиг.1-2). Создают бинарный файл с информацией об отладке в главной системе (Хост). Извлекают информацию о типе переменной, о месте расположения переменной (стек, регистры или память), о соответствии между строками исходного и инструкциями бинарного кода. Пересылают извлеченную информацию в программу трассировки на устройстве. В устройстве выполняют инструментацию, при этом вставляют точки инструментации в функцию программы. Собирают информацию о значениях переменных в данной точке инструментации во время выполнения программы.
Рассмотрим подробное пошаговое выполнение предложенного способа (Фиг.1-3). Сначала конфигурируют компьютерную систему, по меньшей мере, с одним процессором, связанную с памятью. При этом компьютерная система содержит операционную систему, которая связана с процессором, данная операционная система работает в пространстве ядра и выполняет операции по команде одной или нескольких пользовательских программ, процессор выполняет действия для осуществления процесса сохранения локальных переменных, путем сохранения их значений в регистрах или в стеке (шаг 1). Затем компилируют исследуемую программу с информацией об отладке в главной системе (шаг 2). Извлекают адрес и информацию о переменной из бинарного кода с отладочной информацией в главной системе (шаг 3). На данном шаге отделяют отладочную информацию от бинарного кода и уменьшают ее объем путем выбора только нужной информации. Уменьшение объема отладочной информации достигается, в частности, путем выбора из всей информации об отладке только следующей информации: адреса инструкции, которая соответствует строке исходного кода (контрольной точке), места расположения переменной (переменная может быть занесена в стек, регистр или память) и размера переменной. Дополнительное уменьшение объема отладочной информации достигается путем выбора информации по специальному запросу пользователя (пользователь может запросить информацию о переменных с определенными именами). Кроме того, наличие данного шага позволяет использовать предложенный способ для встроенных систем в условиях ограниченных ресурсов. Посылают извлеченную информацию в программу трассировки на устройстве (шаг 4). На данном шаге пользователь передает извлеченную информацию об адресах инструкций (адреса контрольных точек), месте расположения переменных и их размерах по назначению. Программа трассировки использует уменьшенную отладочную информацию для задания контрольных точек и сбора данных из бинарного кода без отладочной информации во время выполнения исследуемой программы. Вставляют контрольную точку при поступлении запроса мониторинга переменной по определенному адресу (шаг 5). Переводят управление в режим ядра, когда при выполнении программы достигают контрольной точки (шаг 6). Выполняют подпрограмму инструментации в пространстве ядра (шаг 7). Считывают значение переменной, которое хранится в регистре процессора или в пространстве пользователя в памяти (шаг 8). Пересылают значение переменной в программу трассировки (шаг 9). Продолжают выполнение исследуемой программы (шаг 10).
Хотя указанный выше вариант выполнения изобретения был изложен с целью иллюстрации настоящего изобретения, специалистам ясно, что возможны разные модификации, добавления и замены, не выходящие из объема и смысла настоящего изобретения, раскрытого в прилагаемой формуле изобретения.

Claims (3)

1. Способ динамической инструментации в компьютерной системе, содержащей: главную систему, связанную с устройством, по меньшей мере, один процессор, связанный с памятью, а также операционную систему, которая связана с процессором и выполнена с возможностью функционирования в пространстве ядра и выполнения операции по команде одной или нескольких пользовательских программ, при этом процессор выполнен с возможностью осуществления действий по выполнению процесса сохранения локальных переменных путем сохранения их значений в регистрах или в стеке, в котором выполняют следующие операции: конфигурируют компьютерную систему; компилируют исследуемую программу с информацией об отладке в главной системе; вставляют контрольную точку при поступлении запроса мониторинга переменной по определенному адресу; переводят управление системы в режим ядра, когда при выполнении программы достигают контрольной точки; выполняют подпрограмму инструментации в пространстве ядра; считывают значение переменной, которое хранится в регистре процессора или в пространстве пользователя в памяти; пересылают значение переменной в программу трассировки; продолжают выполнение исследуемой программы, отличающийся тем, что между операциями компиляции исследуемой программы и вставки контрольной точки дополнительно выполняют следующие операции: извлекают адрес и информацию о переменной из бинарного кода с отладочной информацией в главной системе, при этом отделяют отладочную информацию от бинарного кода и уменьшают объем отладочной информации путем выбора из нее только необходимой информации; посылают извлеченную информацию программе трассировки на устройстве, при этом пользователь передает извлеченную информацию об адресах инструкций, месте расположения переменных и их размерах по назначению, а программа трассировки, используя уменьшенную отладочную информацию, задает контрольные точки и собирает данные из бинарного кода без отладочной информации во время выполнения программы.
2. Способ по п.1, отличающийся тем, что уменьшают объем отладочной информации, выбирая из нее только необходимую информацию, а именно адреса инструкции, которая соответствует строке исходного кода, места расположения переменной и размер переменной.
3. Способ по п.2, отличающийся тем, что дополнительно уменьшают объем отладочной информации путем выбора из нее информации по конкретному запросу пользователя.
RU2008141835/09A 2008-10-23 2008-10-23 Способ динамической инструментации RU2390821C1 (ru)

Priority Applications (1)

Application Number Priority Date Filing Date Title
RU2008141835/09A RU2390821C1 (ru) 2008-10-23 2008-10-23 Способ динамической инструментации

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
RU2008141835/09A RU2390821C1 (ru) 2008-10-23 2008-10-23 Способ динамической инструментации

Publications (1)

Publication Number Publication Date
RU2390821C1 true RU2390821C1 (ru) 2010-05-27

Family

ID=42680572

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2008141835/09A RU2390821C1 (ru) 2008-10-23 2008-10-23 Способ динамической инструментации

Country Status (1)

Country Link
RU (1) RU2390821C1 (ru)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2668973C2 (ru) * 2013-06-06 2018-10-05 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Отладка машинного кода путем перехода от исполнения в собственном режиме к исполнению в интерпретируемом режиме

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Высокопроизводительные параллельные вычисления на кластерных системах. Материалы второго Международного научно-практического семинара. Под ред. проф. Р.Г.Стронгина. - Нижний Новгород: изд-во Нижегородского университета, 2002, с.249-256. *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2668973C2 (ru) * 2013-06-06 2018-10-05 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Отладка машинного кода путем перехода от исполнения в собственном режиме к исполнению в интерпретируемом режиме
US10127138B2 (en) 2013-06-06 2018-11-13 Microsoft Technology Licensing, Llc. Debugging native code by transitioning from execution in native mode to execution in interpreted mode

Similar Documents

Publication Publication Date Title
EP3788490B1 (en) Execution control with cross-level trace mapping
US6662362B1 (en) Method and system for improving performance of applications that employ a cross-language interface
US9274923B2 (en) System and method for stack crawl testing and caching
US8266608B2 (en) Post-compile instrumentation of object code for generating execution trace data
US6430741B1 (en) System and method for data coverage analysis of a computer program
US9152531B2 (en) Post-compile instrumentation of object code for generating execution trace data
US6026235A (en) System and methods for monitoring functions in natively compiled software programs
Gosain et al. A survey of dynamic program analysis techniques and tools
US7900198B2 (en) Method and system for parameter profile compiling
CN105183592B (zh) 用于支持性能分析的方法和装置
US20070234307A1 (en) Methods and apparatus to inline conditional software instrumentation
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
JP2006185211A (ja) プログラム解析装置、テスト実行装置、その解析方法及びプログラム
US20100275185A1 (en) System and Method for High Performance Coverage Analysis
US8533683B2 (en) Stack walking enhancements using sensorpoints
US20080127119A1 (en) Method and system for dynamic debugging of software
US20080127118A1 (en) Method and system for dynamic patching of software
CN102722438B (zh) 一种内核调试的方法和设备
JP2009237610A (ja) コード変換装置及びコード変換方法
CN113535545A (zh) 一种用于程序动态分析的二进制插桩方法
RU2390821C1 (ru) Способ динамической инструментации
Xie et al. An empirical study of java dynamic call graph extractors
Waddington et al. Dynamic analysis and profiling of multithreaded systems
CN112905474B (zh) 一种基于硬件的高级程序动态控制流追踪方法和装置
US20220164446A1 (en) Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20181024