ИНДЕКСАЦИЯ И ВОСПРОИЗВЕДЕНИЕ ТРАССИРОВОК С ПЕРЕХОДОМ ПО ВРЕМЕНИ С ИСПОЛЬЗОВАНИЕМ ДИФФГРАММ Российский патент 2024 года по МПК G06F11/28 

Описание патента на изобретение RU2815369C1

Уровень техники

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

[02] Разработчики традиционно используют множество подходов для того, чтобы идентифицировать нежелательные поведения программного обеспечения и затем идентифицировать местоположения в коде приложения, которые вызывают нежелательные поведения программного обеспечения. Например, разработчик может тестировать различные части кода приложения относительно различных вводов (например, поблочное тестирование). В качестве другого примера, разработчик может рассуждать в отношении выполнения кода приложения в отладчике (например, посредством задания точек останова/точек наблюдения посредством продвижения через строки кода и т.д. по мере того, как код выполняется). В качестве другого примера, разработчик может наблюдать поведения при выполнении кода (например, временную синхронизацию, покрытие) в профилировщике. В качестве другого примера, разработчик может вводить диагностический код (например, трассировочные операторы) в код приложения.

[03] Хотя традиционные диагностические инструменты (например, отладчики, профилировщики и т.д.) работают с выполняющимся в прямом направлении кодом "вживую", возникающая форма диагностических инструментов обеспечивает "статистическую отладку" (также называемую "отладкой с переходом по времени" (или "обратной отладкой")), при которой выполнение, по меньшей мере, части программного потока(ов) программы записывается в один или более трассировочных файлов (т.е. записанное выполнение). С использованием некоторых технологий трассировки, записанное выполнение может содержать "точные на уровне битов" статистические данные трассировки, которые обеспечивают виртуальное "воспроизведение" записанной части(ей) трассируемого программного потока(ов) (например, через эмуляцию) вниз вплоть до степени детализации отдельных инструкций (например, инструкций с машинным кодом, инструкций с кодом на промежуточном языке и т.д.). Таким образом, с использованием "точных на уровне битов" данных трассировки, диагностические инструменты могут обеспечивать возможность разработчикам рассуждать в отношении записанного предшествующего выполнения рассматриваемого кода, в отличие от выполнения в прямом направлении "вживую" этого кода. Например, статистический отладчик может предоставлять взаимодействия с пользователем, которые обеспечивают прямые и обратные точки останова/точки наблюдения, которые обеспечивают возможность продвижения по коду в прямом и обратном направлении и т.д. С другой стороны, статистический профилировщик может извлекать поведения при выполнении кода (например, временную синхронизацию, покрытие) из ранее выполняемого кода.

[04] Чтобы предоставлять взаимодействия с пользователем, обеспечивающие обратные точки останова/точки наблюдения, обратное продвижение и т.д., отладчик воспроизводит трассировку вперед с началом в точке (такой как ключевой кадр, который содержит снимок состояния регистра и значений запоминающего устройства), которая находится до "текущей" временной точки выполнения, которая представляется в отладчике. Например, предположим, что отладчик представляет, в качестве текущей временной точки выполнения, последнюю инструкцию функции. Предположим также, что отладчику инструктировано (например, через пользовательский ввод или посредством другого программного компонента) изменять на противоположное направление (например, продвигаться назад) выполнения в первую инструкцию функции. Чтобы добиваться этого, отладчик может идентифицировать ключевой кадр в трассировке, который предшествует первой инструкции функции. Отладчик затем может восстанавливать начальное состояние программы (например, значения регистров процессора, значения запоминающего устройства и т.д.) из этого ключевого кадра и продолжать воспроизводить все трассируемые инструкции между ключевым кадром и первой инструкцией функции, чтобы восстанавливать состояние программы во время первой инструкции. Отладчик затем может представлять первую инструкцию функции в качестве текущей временной точки выполнения, что включает в себя представление всех из этих восстановленных состояний программы. Таким образом, посредством воспроизведения в прямом направлении из ключевого кадра, чтобы восстанавливать состояние для первой инструкции, отладчик предоставляет иллюзию выполнения в обратном направлении из второй инструкции в первую инструкцию.

[05] В зависимости от реализаций трассировки и других факторов (например, запоминающего устройства, доступного в ходе трассировки, приемлемого объема служебной информации, налагаемого посредством трассировки, и т.д.), может быть предусмотрено значительное количество трассируемых инструкций между ключевыми кадрами. Например, в некоторых реализациях может быть нормальным, если предусмотрено от одной до десяти миллионов трассируемых инструкций между ключевыми кадрами. В этих реализациях, изменение направления выполнения даже посредством одной инструкции может приводить к воспроизведению миллионов инструкций.

Сущность изобретения

[06] По меньшей мере, некоторые варианты осуществления, описанные в данном документе, повышают производительность и эффективность функциональности обратной отладки посредством дополнения трассировки диффграммами и посредством использования этих диффграмм для того, чтобы быстро восстанавливать состояние программы, чтобы достигать целевой инструкции. В отличие от ключевого кадра, который сохраняет снимок состояния в одну точку времени значений регистров и/или запоминающего устройства для всего программного потока или потока, которые являются достаточными для того, чтобы инициировать воспроизведение из ключевого кадра, диффграмма сохраняет данные преобразования, которые могут использоваться для того, чтобы детализируемо преобразовывать поднабор состояния между двумя временными точками выполнения. Эти данные преобразования могут быть ограничены в объеме только теми изменениями, которые возникают в именованных ресурсах (например, в местоположениях ячеек запоминающего устройства, регистрах и т.д.) между первой и второй временными точками выполнения. Таким образом, диффграмма может быть гораздо меньшей по размеру, чем ключевой кадр, и в силу этого практично, если они возникают гораздо чаще ключевых кадров. Помимо этого, в отличие от ключевых кадров, данные преобразования диффграммы могут быть двунаправленными. Таким образом, с помощью данных двунаправленного преобразования, диффграмма может "суммироваться" с первым состоянием в первой инструкции для того, чтобы преобразовывать первое состояние во второе состояние в дальнейшей второй инструкции, и эта же самая диффграмма также может "вычитаться" во второй инструкции для того, чтобы преобразовывать второе состояние в первое состояние.

[07] В вариантах осуществления, диффграммы могут быть основаны на ключевых кадрах или других диффграммах и являются составимыми. Например, первая диффграмма (например, которая может быть основана на ключевом кадре) может задавать преобразование из первого состояния (например, полученного из ключевого кадра) в первой инструкции во второе состояние в дальнейшей второй инструкции. Вторая диффграмма (например, которая может быть основана на первой диффграмме) может задавать преобразование из второго состояния во второй инструкции в третье состояние в дальнейшей третьей инструкции. В вариантах осуществления, первая и вторая диффграммы могут суммироваться с первым состоянием, чтобы восстанавливать третье состояние, или могут вычитаться из третьего состояния, чтобы восстанавливать первое состояние.

[08] Посредством использования диффграмм, инструмент с использованием трассировки (например, отладчик, профилировщик, облачная услуга и т.д.) может быстро резко переходить к целевой инструкции в трассировке без необходимости воспроизводить все инструкции между ключевым кадром и целевой инструкцией. Например, инструмент может резко переходить к произвольной целевой инструкции посредством восстановления состояния после предыдущего ключевого кадра и посредством последующего суммирования всех промежуточных диффграмм между ключевым кадром и целевой инструкцией. Если целевая инструкция попадает на границу диффграммы, ее состояние может восстанавливаться без воспроизведения инструкций. Если целевая инструкция попадает между границами диффграмм, инструмент может восстанавливать состояние до границы диффграммы, предшествующей целевой инструкции, и затем воспроизводить только эти инструкции между этой границей и целевой инструкцией. Если инструмент уже восстанавливает состояние в некоторой "текущей" инструкции, и если эта текущая инструкция попадает на границу диффграммы, инструмент может резко переходить назад к целевой предшествующей инструкции посредством вычитания одной или более диффграмм из состояния в текущей инструкции, с тем чтобы достигать целевой предшествующей инструкции (т.е. если она попадает на границу диффграммы) или достигать границы диффграммы, непосредственно предшествующей целевой предшествующей инструкции (т.е. если она попадает между границами диффграмм).

[09] Некоторые варианты осуществления интеллектуально создают диффграммы, которые имеют границы, которые попадают в "интересующие" местоположения для отладки, такие как границы двоичного интерфейса приложений (ABI) (например, границы функций, границы вызовов ядра и т.д.) и переходы между программными потоками, увеличивая вероятность резкого перехода к (или между) инструкциям, которые попадают на границы диффграмм. В вариантах осуществления, диффграммы могут создаваться в ходе трассировочной записи, в ходе последующей трассировочной индексации и/или в ходе трассировочного воспроизведения. Например, один вариант осуществления может создавать ключевые кадры в ходе трассировочной записи, может суммировать диффграммы с трассировкой с первой степенью детализации в ходе этапа индексации и может создавать диффграммы в запоминающем устройстве с одной или более вторых степеней детализации в ходе трассировочного воспроизведения. В конкретном примере, вариант осуществления может создавать ключевые кадры в трассировке примерно каждые три миллиона инструкций в ходе трассировки, может вставлять диффграммы в трассировку примерно каждые десять тысяч инструкций во время индексации (при потенциальном нацеливании на ABI-границы и переходы между программными потоками) и может создавать диффграммы в оперативном запоминающем устройстве в ходе воспроизведения примерно каждые сто инструкций. Варианты осуществления могут даже создавать диффграммы на уровне инструкций в ходе трассировочного воспроизведения (например, для самых недавних ста воспроизводимых инструкций).

[010] Некоторые варианты осуществления направлены на индексацию трассировки с диффграммой (например, в течение фазы индексации и/или в ходе трассировочного воспроизведения). Эти варианты осуществления осуществляют доступ к воспроизводимой трассировке, которая записывает предшествующее выполнение одного или более программных потоков объекта, и идентифицируют, в рамках трассировочного сегмента, записывающего предшествующее выполнение последовательности из множества инструкций первого программного потока из одного или более программных потоков, поднабор последовательности инструкций. Поднабор инструкций начинается с первой инструкции и завершается второй инструкцией. Поднабор инструкций воспроизводится для того, чтобы получать состояние одного или более именованных ресурсов. Один или более именованных ресурсов имеют первое состояние в первой инструкции и другое второе состояние во второй инструкции. На основе воспроизведения поднабора инструкций, формируется диффграмма для поднабора инструкций. Диффграмма структурируется таким образом, что суммирование диффграммы в первой инструкции переводит один или более именованных ресурсов во второе состояние, и вычитание диффграммы во второй инструкции переводит один или более именованных ресурсов в первое состояние. Диффграмма сохраняется в связи с трассировкой (например, в запоминающем устройстве и/или на устройстве долговременного хранения данных).

[011] Другие варианты осуществления, которые являются комбинируемыми с первыми вариантами осуществления, используют диффграмму для того, чтобы воспроизводить трассировку. Эти варианты осуществления осуществляют доступ к воспроизводимой трассировке, которая записывает предшествующее выполнение одного или более программных потоков объекта, и идентифицируют, в воспроизводимой трассировке, конкретную инструкцию в рамках трассировочного сегмента, записывающего предшествующее выполнение последовательности из множества инструкций первого программного потока из одного или более программных потоков. Множество инструкций включают в себя конкретную инструкцию. Набор из одной или более диффграмм идентифицируется для восстановления предшествующего состояния одного или более именованных ресурсов, которое необходимо для эмуляции предшествующего выполнения конкретной инструкции. Набор из одной или более диффграмм применяется, чтобы восстанавливать предшествующее состояние одного или более именованных ресурсов. После применения набора из одной или более диффграмм, предшествующее выполнение конкретной инструкции эмулируется на основе восстановленного предшествующего состояния одного или более именованных ресурсов.

[012] Это краткое изложение существа изобретения приведено для представления в упрощенной форме подборки концепций, которые дополнительно описаны ниже в подробном описании. Данное краткое изложение существа изобретения не имеет намерение идентифицировать ключевые или важнейшие признаки заявленного изобретения, а также не имеет намерение использоваться в качестве помощи при определении объема заявленного изобретения.

Краткое описание чертежей

[013] Чтобы описывать способ, которым могут быть получены вышеуказанные и другие преимущества и признаки изобретения, более подробное описание изобретения, вкратце описанного выше, должно быть представлено посредством ссылки на его конкретные варианты осуществления, которые проиллюстрированы на прилагаемых чертежах. При условии того, что эти чертежи изображают только типичные варианты осуществления изобретения и в силу этого не должны рассматриваться как ограничивающие его объем, изобретение описывается и поясняется с дополнительной спецификой и подробностью посредством использования прилагаемых чертежей, на которых:

[014] Фиг. 1A иллюстрирует примерное вычислительное окружение, которое упрощает дополнение трассировки с диффграммами и/или использует эти диффграммы для того, чтобы быстро восстанавливать состояние программы, чтобы достигать целевой инструкции;

[015] Фиг. 1B иллюстрирует примерный компонент отладки, который создает и/или использует диффграммы;

[016] Фиг. 2 иллюстрирует примерное вычислительное окружение, в котором компьютерная система по фиг. 1A соединяется с одной или более других компьютерных систем по одной или более сетей;

[017] Фиг. 3 иллюстрирует пример записанного выполнения выполняемого объекта;

[018] Фиг. 4A иллюстрирует представление данных, которые могут включаться в записанное выполнение, которое дополнено диффграммами;

[019] Фиг. 4B иллюстрирует древовидные представления зависимостей между диффграммами;

[020] Фиг. 5 иллюстрирует блок-схему последовательности операций примерного способа для индексации трассировки с диффграммой;

[021] Фиг. 6 иллюстрирует блок-схему последовательности операций примерного способа для использования диффграммы для того, чтобы воспроизводить трассировку; и

[022] Фиг. 7 иллюстрирует блок-схему последовательности операций примерного способа для формирования и использования диффграмм в ходе трассировочного воспроизведения.

Подробное описание изобретения

[023] По меньшей мере, некоторые варианты осуществления, описанные в данном документе, повышают производительность и эффективность функциональности обратной отладки посредством дополнения трассировки диффграммами и посредством использования этих диффграмм для того, чтобы быстро восстанавливать состояние программы, чтобы достигать целевой инструкции. В отличие от ключевого кадра, который сохраняет снимок состояния в одну точку времени значений регистров и/или запоминающего устройства для всего программного потока или потока, которые являются достаточными для того, чтобы инициировать воспроизведение из ключевого кадра, диффграмма сохраняет данные преобразования, которые могут использоваться для того, чтобы детализируемо преобразовывать поднабор состояния между двумя временными точками выполнения. Эти данные преобразования могут быть ограничены в объеме только теми изменениями, которые возникают в именованных ресурсах (например, в местоположениях ячеек запоминающего устройства, регистрах и т.д.) между первой и второй временными точками выполнения. Таким образом, диффграмма может быть гораздо меньшей по размеру, чем ключевой кадр, и в силу этого практично, если они возникают гораздо чаще ключевых кадров. Помимо этого, в отличие от ключевых кадров, данные преобразования диффграммы могут быть двунаправленными. Таким образом, с помощью данных двунаправленного преобразования, диффграмма может "суммироваться" с первым состоянием в первой инструкции для того, чтобы преобразовывать первое состояние во второе состояние в дальнейшей второй инструкции, и эта идентичная диффграмма также может "вычитаться" во второй инструкции для того, чтобы преобразовывать второе состояние в первое состояние.

[024] В вариантах осуществления, диффграммы могут быть основаны на ключевых кадрах или других диффграммах и являются составимыми. Например, первая диффграмма (например, которая может быть основана на ключевом кадре) может задавать преобразование из первого состояния (например, полученного из ключевого кадра) в первой инструкции во второе состояние в дальнейшей второй инструкции. Вторая диффграмма (например, которая может быть основана на первой диффграмме) может задавать преобразование из второго состояния во второй инструкции в третье состояние в дальнейшей третьей инструкции. В вариантах осуществления, первая и вторая диффграммы могут суммироваться с первым состоянием, чтобы восстанавливать третье состояние, или могут вычитаться из третьего состояния, чтобы восстанавливать первое состояние.

[025] Посредством использования диффграмм, инструмент с использованием трассировки (например, отладчик, профилировщик, облачная услуга и т.д.) может быстро резко переходить к целевой инструкции в трассировке без необходимости воспроизводить все инструкции между ключевым кадром и целевой инструкцией. Например, инструмент может резко переходить к произвольной целевой инструкции посредством восстановления состояния после предыдущего ключевого кадра и посредством последующего суммирования всех промежуточных диффграмм между ключевым кадром и целевой инструкцией. Если целевая инструкция попадает на границу диффграммы, ее состояние может восстанавливаться без воспроизведения инструкций. Если целевая инструкция попадает между границами диффграмм, инструмент может восстанавливать состояние до границы диффграммы, предшествующей целевой инструкции, и затем воспроизводить только эти инструкции между этой границей и целевой инструкцией. Если инструмент уже восстанавливает состояние в некоторой "текущей" инструкции, и если эта текущая инструкция попадает на границу диффграммы, инструмент может резко переходить назад к целевой предшествующей инструкции посредством вычитания одной или более диффграмм из состояния в текущей инструкции, с тем чтобы достигать целевой предшествующей инструкции (т.е. если она попадает на границу диффграммы) или достигать границы диффграммы, непосредственно предшествующей целевой предшествующей инструкции (т.е. если она попадает между границами диффграмм).

[026] Некоторые варианты осуществления интеллектуально создают диффграммы, которые имеют границы, которые попадают в "интересующие" местоположения для отладки, такие как границы двоичного интерфейса приложений (ABI) (например, границы функций, границы вызовов ядра и т.д.) и переходы между программными потоками, увеличивая вероятность резкого перехода к (или между) инструкциям, которые попадают на границы диффграмм. В вариантах осуществления, диффграммы могут создаваться в ходе трассировочной записи, в ходе последующей трассировочной индексации и/или в ходе трассировочного воспроизведения. Например, один вариант осуществления может создавать ключевые кадры в ходе трассировочной записи, может суммировать диффграммы с трассировкой с первой степенью детализации в ходе этапа индексации и может создавать диффграммы в запоминающем устройстве с одной или более вторых степеней детализации в ходе трассировочного воспроизведения. В конкретном примере, вариант осуществления может создавать ключевые кадры в трассировке примерно каждые три миллиона инструкций в ходе трассировки, может вставлять диффграммы в трассировку примерно каждые десять тысяч инструкций во время индексации (при потенциальном нацеливании на ABI-границы и переходы между программными потоками) и может создавать диффграммы в оперативном запоминающем устройстве в ходе воспроизведения примерно каждые сто инструкций. Варианты осуществления могут даже создавать диффграммы на уровне инструкций в ходе трассировочного воспроизведения (например, для самых недавних ста воспроизводимых инструкций).

[027] Записанное выполнение, используемое вариантами осуществления в данном документе, может формироваться посредством множества технологий статистической отладки. В общем, технологии статистической отладки записывают или восстанавливают состояние выполнения объекта в различные моменты времени, чтобы обеспечивать возможность, по меньшей мере, частичной эмуляции выполнения этого объекта в дальнейшем из этого состояния выполнения. Точность воспроизведения этого виртуального выполнения варьируется в зависимости от того, какое состояние записанного выполнения доступно.

[028] Например, один класс технологий статистической отладки, называемый в данном документе "отладкой с переходом по времени", непрерывно записывает точную на уровне битов трассировку выполнения объекта. Эта точная на уровне битов трассировка затем может использоваться в дальнейшем для того, чтобы точно воспроизводить предшествующее выполнение этого объекта вниз согласно точности воспроизведения отдельных инструкций с кодом. Например, точная на уровне битов трассировка может записывать информацию, достаточную для того, чтобы воспроизводить начальное состояние процессора, по меньшей мере, для одной точки в предшествующем выполнении программного потока (например, посредством записи снимка состояния регистров процессора), наряду со значениями данных, которые считываются посредством инструкций программного потока по мере того, как они выполняются после этой точки во времени (например, считываниями из запоминающего устройства). Эта точная на уровне битов трассировка затем может использоваться для того, чтобы воспроизводить выполнение инструкций с кодом программного потока (в начале с начального состояния процессора) на основе предоставления инструкций с записанными считываниями.

[029] Другой класс технологии статистической отладки, называемый в данном документе "отладкой с трассировкой ветвлений", основывается на восстановлении, по меньшей мере, части состояния выполнения объекта на основе операции в обратном направлении из дампа или снимка состояния (например, дампа катастрофического отказа программного потока), что включает в себя трассировку ветвлений процессора (т.е. что включает в себя запись того, осуществляются или нет ветвления). Эти технологии начинают со значениями (например, запоминающего устройства и регистра) из этого дампа или снимка состояния и, с использованием трассировки ветвлений для того, чтобы, по меньшей мере, частично определять поток выполнения кода, итеративно воспроизводят инструкции с кодом объекта в обратном и прямом направлении, чтобы восстанавливать промежуточные значения данных (например, регистра и запоминающего устройства), используемые посредством этого кода до тех пор, пока эти значения не достигают установившегося состояния. Эти технологии могут быть ограничены в том, насколько далеко назад они могут восстанавливать значения данных, и в том, сколько значений данных могут восстанавливаться. Тем не менее, восстановленные статистические данные выполнения могут использоваться для статистической отладки.

[030] Еще один другой класс технологии статистической отладки, называемый в данном документе "воспроизведением и отладкой с формированием снимков состояния", периодически записывает полные снимки состояния пространства запоминающего устройства и регистров процессора объекта в то время, когда он выполняется. Если объект основывается на данных из источников, отличных от собственного запоминающего устройства объекта, либо из недетерминированного источника, эти технологии также могут записывать такие данные наряду со снимками состояния. Эти технологии затем используют данные в снимках состояния, чтобы воспроизводить выполнение кода объекта между снимками состояния.

[031] Фиг. 1A иллюстрирует примерное вычислительное окружение 100a, которое обеспечивает дополнение трассировки диффграммами и/или использует эти диффграммы для быстрого восстановления состояния программы, чтобы достигать целевой инструкции. Как проиллюстрировано, вычислительное окружение 100a может содержать или использовать компьютерную систему 101 специального назначения или общего назначения, которая включает в себя компьютерные аппаратные средства, такие как, например, один или более процессоров 102, системное запоминающее устройство 103, устройство 104 долговременного хранения данных и/или сетевое устройство 105, которые функционально соединяются с использованием одной или более шин 106 связи.

[032] Варианты осуществления в пределах объема настоящего изобретения могут включать себя физические и другие машиночитаемые носители для переноса или сохранения машиноисполняемых инструкций и/или структур данных. Эти машиночитаемые носители могу представлять собой любые доступные носители, к которым можно осуществлять доступ посредством компьютерной системы общего назначения или специального назначения. Машиночитаемые носители, которые сохраняют машиноисполняемые инструкции и/или структуры данных, представляют собой компьютерные носители хранения данных. Машиночитаемые носители, которые переносят машиноисполняемые инструкции и/или структуры данных, представляют собой среды передачи. Таким образом, в качестве примера, а не ограничения, варианты осуществления изобретения могут содержать, по меньшей мере, два совершенно различных типа машиночитаемых носителей: компьютерные носители хранения данных и среды передачи.

[033] Компьютерные носители хранения данных представляют собой физические носители хранения данных (например, системное запоминающее устройство 103 и/или устройство 104 долговременного хранения данных), которые сохраняют машиноисполняемые инструкции и/или структуры данных. Физические носители хранения данных включают в себя компьютерные аппаратные средства, такие как RAM, ROM, EEPROM, полупроводниковые накопители (SSD), флэш-память, запоминающее устройство на фазовых переходах (PCM), устройство хранения данных на оптических дисках, устройство хранения данных на магнитных дисках или другие магнитные устройства хранения данных либо любое другое аппаратное устройство(а) хранения данных, которое может использоваться для того, чтобы сохранять программный код в форме машиноисполняемых инструкций или структур данных, к которому может осуществляться доступ и которое может выполняться посредством компьютерной системы общего назначения или специального назначения для того, чтобы реализовывать раскрытую функциональность изобретения.

[034] Среды передачи могут включать в себя сеть и/или линии связи для передачи данных, которые могут использоваться для того, чтобы переносить программный код в форме машиноисполняемых инструкций или структур данных, и к которым может осуществляться доступ посредством системы общего назначения или специального назначения. "Сеть" задается как одна или более линий связи для передачи данных, которые обеспечивают транспортировку электронных данных между компьютерными системами и/или модулями и/или другими электронными устройствами. Когда информация передается или предоставляется по сети или другим соединениям связи (проводным, беспроводным либо комбинации проводных и беспроводных) в компьютерную систему, компьютерная система может рассматривать соединение в качестве сред передачи. Комбинации вышеперечисленного также следует включать в число машиночитаемых носителей.

[035] Дополнительно, после достижения различных компонентов компьютерной системы, программный код в форме машиноисполняемых инструкций или структур данных может передаваться автоматически из сред передачи в компьютерные носители хранения данных (или наоборот). Например, машиноисполняемые инструкции или структуры данных, принимаемые по сети или линии связи для передачи данных, могут буферизоваться в RAM в сетевом интерфейсном модуле (например, в сетевом устройстве(ах) 105) и затем в конечном счете переноситься в RAM компьютерной системы (например, в системное запоминающее устройство 103) и/или в менее энергозависимые компьютерные носители хранения данных (например, в устройство 104 долговременного хранения данных) в компьютерной системе. Таким образом, следует понимать, что компьютерные носители хранения данных могут быть включены в компоненты компьютерной системы, которые также (или даже главным образом) используют среды передачи.

[036] Машиночитаемые инструкции содержат, например, инструкции и данные, которые, при выполнении в одном или более процессоров, инструктируют компьютерной системе общего назначения, компьютерной системе специального назначения или устройству обработки специального назначения выполнять определенную функцию или группу функций. Машиноисполняемые инструкции, например, представлять собой инструкции с машинным кодом (например, двоичные файлы), инструкции в промежуточном формате, к примеру, на ассемблерном языке, либо даже исходный код.

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

[038] Специалисты в данной области техники также должны принимать во внимание, что изобретение может осуществляться на практике в облачном вычислительном окружении. Облачные вычислительные окружения могут быть распределенными, хотя это не требуется. Если являются распределенными, облачные вычислительные окружения могут быть распределены по разным странам в пределах организации и/или иметь компоненты, которыми владеют несколько организаций. В этом описании и в прилагаемой формуле изобретения, "облачные вычисления" задаются как модель для обеспечения сетевого доступа по запросу к совместно используемому пулу конфигурируемых вычислительных ресурсов (например, сетей, серверов, устройств хранения, приложений и служб). Определение "облачных вычислений" не ограничено ни одним из множества других преимуществ, которые могут быть получены из такой модели при надлежащем развертывании.

[039] Модель облачных вычислений может состоять из различных характеристик, таких как самообслуживание по запросу, широкополосный доступ к сети, объединение ресурсов в пул, быстрая эластичность, обслуживание на основе измеряемых показателей и т.д. Модель облачных вычислений также может принимать форму различных моделей предоставления услуг, таких как, например, программное обеспечение как услуга (SaaS), платформа как услуга (PaaS) и инфраструктура как услуга (IaaS). Модель облачных вычислений также может развертываться с использованием различных моделей развертывания, таких как закрытое облако, коллективное облако, открытое облако, гибридное облако и т.д.

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

[041] Как показано на фиг. 1A каждый процессор 102 может включать в себя (в числе прочего) один или более модулей 107 обработки (например, ядер процессора) и один или более кэшей 108. Каждый модуль 107 обработки загружает и выполняет инструкции с машинным кодом через кэши 108. В ходе выполнения этих инструкций с машинным кодом в одном или более модулей 107b выполнения, инструкции могут использовать внутренние регистры процессора 107a в качестве временных местоположений хранения и могут считывать и записывать в различные местоположения в системном запоминающем устройстве 103 через кэши 108. В общем, кэши 108 временно кэшируют части системного запоминающего устройства 103; например, кэши 108 могут включать в себя "кодовую" часть, которая кэширует части системного запоминающего устройства 103, сохраняющие код приложения, и часть "данных", которая кэширует части системного запоминающего устройства 103, сохраняющие данные во время выполнения приложения. Если модуль 107 обработки требует данных (например, кода или данных во время выполнения приложения), еще не сохраненных в кэшах 108, то модуль 107 обработки может инициировать "неудачное обращение в кэш", что приводит к тому, что необходимые данные должны подвергаться выборке из системного запоминающего устройства 103 при одновременном потенциальном "замещении" некоторых других данных из кэшей 108 обратно в системное запоминающее устройство 103.

[042] Как проиллюстрировано, устройство 104 долговременного хранения данных может сохранять машиноисполняемые инструкции и/или структуры данных, представляющие компоненты исполняемого программного обеспечения; соответственно, во время выполнения этого программного обеспечения в процессоре(ах) 102, одна или более частей этих машиноисполняемых инструкций и/или структур данных могут загружаться в системное запоминающее устройство 103. Например, устройство 104 долговременного хранения данных показано потенциально как сохраняющие машиноисполняемые инструкции и/или структуры данных, соответствующие компоненту 109 отладки, компоненту 110 трассировщика, компоненту 111 эмуляции и одному или более приложений 112. Устройство 104 долговременного хранения данных также может сохранять данные, такие как одно или более записанных выполнений 113 (например, сформированных с использованием одной или более технологий статистической отладки, описанных выше).

[043] В общем, компонент 109 отладки использует компонент 111 эмуляции для того, чтобы эмулировать выполнение кода выполняемых объектов, таких как приложение(я) 112, на основе данных состояния выполнения, полученных из одного или более записанных выполнений 113. Таким образом, фиг. 1A показывает то, что компонент 109 отладки и компонент 111 эмуляции загружаются в системное запоминающее устройство 103 (т.е. компонент 109' отладки и компонент 111' эмуляции), и то, что приложение(я) 112 эмулируется в компоненте 111' эмуляции (т.е. приложение(я) 112'). Как подробнее поясняется в связи с фиг. 1B, компонент 109 отладки может предоставлять функциональность для индексации записанного выполнения 113 приложения 112 с диффграммами и/или для воспроизведения предшествующего выполнения приложения 112 из записанного выполнения 113 с базированием на диффграммах. Компонент 109 отладки может соответствовать любому типу инструмента, который потребляет записанное выполнение 113 в качестве части анализа предшествующего выполнения приложения 112. Например, компонент 109 отладки может представлять собой отладчик, профилировщик, облачную услугу и т.д.

[044] В общем, компонент 110 трассировщика записывает или "трассирует" выполнение одного или более приложений 112 в записанное выполнение(я) 113 (например, с использованием одного или более типов технологий статистической отладки, описанных выше). Компонент 110 трассировщика может записывать выполнение приложения(й) 112 независимо от того, представляет выполнение собой или нет выполнение "вживую" в процессоре(ах) 102 непосредственно, от того, представляет выполнение собой или нет выполнение "вживую" в процессоре(ах) 102 через управляемую среду выполнения, и/или от того, представляет выполнение собой или нет эмулированное выполнение через компонент 111 эмуляции. Таким образом, фиг. 1A также показывает то, что компонент 110 трассировщика также загружается в системное запоминающее устройство 103 (т.е. компонент 110' трассировщика). Стрелка между компонентом 110' трассировщика и записанным выполнением(ями) 113' указывает то, что компонент 110' трассировщика может записывать данные трассировки в записанное выполнение(я) 113' (которое затем может сохраняться в устройство 104 долговременного хранения данных в качестве записанного выполнения(й) 113).

[045] Компьютерная система 101 дополнительно или альтернативно может принимать одно или более записанных выполнений 113 из другой компьютерной системы (например, с использованием сетевого устройства 105). Например, фиг. 2 иллюстрирует примерное вычислительное окружение 200, в котором компьютерная система 101 по фиг. 1A соединяется с одной или более другими компьютерными системами 202 (т.е. компьютерных систем 202a-202n) по одной или более сетей 201. Как показано в примере 200, каждая компьютерная система 202 включает в себя компонент 110 трассировщика и приложение(я) 112. В связи с этим, компьютерная система 101 может принимать, по сети(ям) 201, одно или более записанных выполнений 113 предшествующего выполнения(й) одного или более приложений 112 в этих компьютерных системах 202.

[046] Следует отметить, что, тогда как компонент 109 отладки, компонент 110 трассировщика и/или компонент 111 эмуляции могут представлять собой независимые компоненты или приложения, они альтернативно могут интегрироваться в идентичное приложение (к примеру, в отладочный комплект) либо могут интегрироваться в другой программный компонент, к примеру, в компонент операционной системы, гипервизор, облачный каркас и т.д. В связи с этим, специалисты в данной области техники также должны принимать во внимание, что изобретение может осуществляться на практике в облачном вычислительном окружении, часть которого составляет компьютерная система 101. Например, тогда как эти компоненты 109-111 могут принимать форму одного или более программных приложений, выполняемых в локальном компьютере пользователя, они также могут принимать форму услуги, предоставляемой посредством облачного вычислительного окружения.

[047] Выше отмечено, что компонент 109 отладки может предоставлять функциональность для индексации записанного выполнения 113 приложения 112 с диффграммами и/или для воспроизведения предшествующего выполнения приложения 112 из записанного выполнения 113 с базированием на диффграммах. Чтобы демонстрировать то, как компонент 109 отладки может достигать вышеуказанного, фиг. 1B иллюстрирует пример 100b, который предоставляет дополнительные подробности компонента 109 отладки по фиг. 1A. Проиллюстрированный компонент 109 отладки на фиг. 1B включает в себя множество компонентов (например, доступ 114 к данным, индексацию 115, эмуляцию 116, вывод 117 и т.д.), которые представляют различные функции, которые компонент 109 отладки может реализовывать в соответствии с различными вариантами осуществления, описанными в данном документе. Следует принимать во внимание, что проиллюстрированные компоненты, в том числе их идентификационные данные, субкомпоненты и компоновка, представляются просто в качестве помощи в описании различных вариантов осуществления компонента 109 отладки, описанного в данном документе, и что эти компоненты являются неограничивающими в отношении того, как программное обеспечение и/или аппаратные средства могут реализовывать различные варианты осуществления компонента 109 отладки, описанного в данном документе, либо его конкретной функциональности.

[048] Как показано, компонент 114 доступа к данным включает в себя компонент 114a трассировочного доступа и компонент 114b кодового доступа. Компонент 114a трассировочного доступа осуществляет доступ к одному или более записанных выполнений 113, к примеру, к записанному выполнению 113 предшествующего выполнения приложения 112. Фиг. 3 иллюстрирует один пример записанного выполнения 300 выполняемого объекта (например, приложения 112), к которому может осуществляться доступ посредством компонента 114a трассировочного доступа, причем записанное выполнение 300 может формироваться с использованием технологий отладки с переходом по времени.

[049] В примере по фиг. 3, записанное выполнение 300 включает в себя множество потоков 301 данных (т.е. потоков 301a-301n данных). В вариантах осуществления, каждый поток 301 данных записывает выполнение различного программного потока, который выполнен из кода приложения 112. Например, поток 301a данных может записывать выполнение первого программного потока приложения 112, тогда как поток 301n данных записывает n-ый программный поток приложения 112. Как показано, поток 301a данных содержит множество пакетов 302 данных. Поскольку конкретные данные, зарегистрированные в каждом пакете 302 данных, могут варьироваться, они показаны как имеющие варьирующиеся размеры. В общем, при использовании технологий отладки с переходом по времени, пакет 302 данных может записывать вводы (например, значения регистров, значения запоминающего устройства и т.д.) в одну или более выполняемых инструкций, которые выполнены в качестве части этого первого программного потока приложения 112. Как показано, поток 301a данных также может включать в себя один или более ключевых кадров 303 (например, ключевых кадров 303a и 303b), которые записывают достаточную информацию, такую как снимок состояния значений регистра и/или запоминающего устройства, что обеспечивает возможность воспроизведения предшествующего выполнения программного потока посредством компонента 116 эмуляции, начиная в точке с ключевого кадра и далее.

[050] В вариантах осуществления, записанное выполнение 113 также может включать в себя фактический код, который выполнен в качестве части приложения 112. Таким образом, на фиг. 3, каждый пакет 302 данных показан как включающий в себя незатененную часть 304 вводов данных и затененную кодовую часть 305. В вариантах осуществления, кодовая часть 305 каждого пакета 302 данных, если есть, может включать в себя выполняемые инструкции, которые выполнены на основе соответствующих вводов данных. Тем не менее, в других вариантах осуществления, записанное выполнение 113 может опускать фактический код, который выполнен, вместо этого с базированием на наличии отдельного доступа к коду приложения 112 (например, из устройства 104 долговременного хранения данных). В этих других вариантах осуществления, каждый пакет данных, например, может указывать адрес или смещение для соответствующей выполняемой инструкции(й) в двоичном образе приложения. Хотя не показано, также может быть возможным то, что записанное выполнение 300 включает в себя поток 301 данных, который сохраняет один или более выводов выполнения кода.

[051] Если имеется несколько потоков 301 данных, каждый из которых записывает выполнение разного программного потока, эти потоки данных могут включать в себя события упорядочения. Каждое событие упорядочения записывает возникновение события, которое является упорядочиваемым по программным потокам. Например, события упорядочения могут соответствовать взаимодействиям между программными потоками, таким как доступы к запоминающему устройству, которое совместно используется посредством программных потоков. Таким образом, например, если первый программный поток, который трассируется в первый поток данных (например, 301a), записывается в переменную синхронизации, первое событие упорядочения может записываться в этот поток данных (например, 301a). В дальнейшем, если второй программный поток, который трассируется во второй поток данных (например, 301b), считывается из этой переменной синхронизации, второе событие упорядочения может записываться в этот поток данных (например, 301b). Эти события упорядочения могут внутренне упорядочиваться. Например, каждое событие упорядочения может быть ассоциировано с монотонно постепенно увеличивающимся значением, причем монотонно постепенно увеличивающиеся значения задают полный порядок между событиями упорядочения. Например, первому событию упорядочения, записанному в первый поток данных, может присваиваться значение в единицу, второму событию упорядочения, записанному во второй поток данных, может присваиваться значение в два, и т.д.

[052] Возвращаясь к фиг. 1B, компонент 114b кодового доступа может получать код приложения 112. Если записанное выполнение(я) 114, полученное посредством компонента 114a трассировочного доступа, включает в себя трассируемый код (например, кодовую часть 305), то компонент 114b кодового доступа может извлекать этот код из записанного выполнения 113. Альтернативно, компонент 114b кодового доступа может получать код приложения 112 из устройства 104 долговременного хранения данных (например, из двоичного образа приложения).

[053] Чтобы предоставлять контекст для дополнительного описания компонента 115 индексации и компонента 116 эмуляции и в качестве введения в структуру и использование диффграмм, фиг. 4A иллюстрирует представление 400 данных, которые могут включаться в записанное выполнение 113, которое дополнено диффграммами. Представление 400 включает в себя представление на временной шкале частей двух потоков 401a и 401b данных трассировки (совместно, потоков 401 данных трассировки). Каждый поток 401 данных трассировки может соответствовать различному ранее выполняемому программному потоку одного из приложений 112, при этом время выполнения протекает слева направо.

[054] Каждый из этих потоков 401 данных трассировки включает в себя множество ключевых кадров 402a-402f (совместно, ключевых кадров 402). Например, ключевой кадр 402a может соответствовать началу выполнения программного потока, трассируемого посредством потока 401a данных (либо началу трассировки программного потока), тогда как ключевые кадры 402b и 402c представляют собой дополнительные ключевые кадры вдоль трассируемого выполнения программного потока. С другой стороны, ключевой кадр 402d может соответствовать началу выполнения программного потока, трассируемого посредством потока 401b данных (либо началу трассировки программного потока), тогда как ключевые кадры 402e и 402f представляют собой дополнительные ключевые кадры вдоль трассируемого выполнения программного потока. Эти ключевые кадры могут создаваться в ходе трассировки (например, посредством трассировщика 110) и/или в ходе последующей индексации (например, посредством компонента 115 индексации). Эти ключевые кадры 402 создают сегменты выполняемых инструкций, которые могут воспроизводиться независимо от других сегментов (как в идентичном программном потоке, так и в различных программных потоках). Например, проиллюстрированная часть потока 401a данных трассировки включает в себя два сегмента инструкций: первый сегмент между ключевым кадром 402a и ключевым кадром 402b и второй сегмент между ключевым кадром 402b и ключевым кадром 402c. Проиллюстрированная часть потока 401b данных трассировки также включает в себя два сегмента инструкций: первый сегмент между ключевым кадром 402d и ключевым кадром 402e и второй сегмент между ключевым кадром 402e и ключевым кадром 402f.

[055] Представление 400 также показывает множество диффграмм 403a-403o (совместно, диффграмм 403) вдоль потоков 401 данных. Например, поток 401a данных показан как включающий в себя диффграммы 403a-403j, тогда как поток 401b данных показан как включающий в себя диффграммы 403k-403o. Каждая диффграмма 403 имеет стрелку, указывающую на диффграмму 403 или ключевой кадр 402, от которого она зависит (т.е. на диффграмму 403 или ключевой кадр 402, который она использует в качестве базовой линии). Чтобы дополнительно визуализировать эти зависимости, фиг. 4B иллюстрирует древовидные представления 405a и 405b зависимостей между диффграммами вдоль потока 401a данных и иллюстрирует древовидное представление 405c зависимостей между диффграммами вдоль потока 401b данных. В представлениях 405a-405b, узлы овальной формы представляют ключевые кадры 402, и узлы прямоугольной формы представляют диффграммы 403.

[056] Как показано вдоль потока 401a данных и посредством древовидного представления 405a, диффграмма 403a зависит от ключевого кадра 402a и имеет зависящую от нее диффграмму 403b. Как показано вдоль потока 401a данных и посредством древовидного представления 405b, диффграмма 403c зависит от ключевого кадра 402b и имеет зависящие от нее диффграммы 403d и 403f; помимо этого, диффграмма 403d имеет зависящую от нее диффграмму 403e, тогда как диффграмма 403f имеет зависящие от нее диффграммы 403g и 403i; диффграмма 403g имеет зависящую от нее диффграмму 403h, тогда как диффграмма 403i имеет зависящую от нее диффграмму 403j. Как показано вдоль потока 401b данных и посредством древовидного представления 405c, диффграммы 403k и 403l зависят от ключевого кадра 402d; помимо этого, диффграмма 403l имеет зависящую от нее диффграмму 403m, которая имеет зависящую от нее диффграмму 403n и которая имеет зависящую от нее диффграмму 403o.

[057] Хотя каждая диффграмма 403 показана на фиг. 4A как возникающая в конкретной точке в соответствующем потоке 401 данных, это служит только для простоты иллюстрации. Диффграмма задает преобразование между состоянием программы в начальной (первой) граничной инструкции и состоянием программы в последующей конечной (второй) граничной инструкции (которая может представлять собой идентичную инструкцию), и может быть предусмотрена последовательность из нуля или более дополнительных инструкций между этими граничными инструкциями. На фиг. 4A, строки, соответствующие диффграммам 403, могут рассматриваться как представляющие конечную граничную инструкцию каждого из этих преобразований. Таким образом, например, диффграмма 403a представляет преобразование между первой граничной инструкцией сразу после ключевого кадра 402a и второй граничной инструкцией в строке, представляющей диффграмму 403a. С другой стороны, диффграмма 403b представляет преобразование между первой граничной инструкцией в (или сразу после) строке, представляющей диффграмму 403a, и второй граничной инструкцией в строке, представляющей диффграмму 403b. В зависимости от реализации, вторая граничная инструкция для диффграммы 403a может представлять собой инструкцию, идентичную первой граничной инструкции для диффграммы 403b, либо они могут быть разными, смежными, инструкциями.

[058] Если диффграмма сохраняется в записанном выполнении 113 (например, посредством компонента 115 индексации), она может сохраняться в потоке 301 данных трассировки, содержащем пакеты 302 данных, записывающие выполнение инструкций программного потока, к которому применяется диффграмма (например, в потоке данных трассировки, записывающем выполнение инструкций для первого программного потока, трассируемого посредством потока 401a данных, в потоке данных трассировки, записывающем выполнение инструкций для второго программного потока, трассируемого посредством потока 401b данных, и т.д.), либо диффграмма может полностью сохраняться в некотором другом потоке 301 данных трассировки (например, в потоке данных, выделенном данным индексации). Если диффграмма сохраняется в рамках потока 301 данных, записывающего выполнение трассировки инструкций программного потока, к которому применяется диффграмма, она может сохраняться в любом местоположении в этом потоке 301 данных. Например, структура данных, представляющая диффграмму 403a, может сохраняться в потоке 301 данных трассировки в строке, представляющей диффграмму 403a (например, в одном или более пакетов 302 данных в/рядом с пакетом 302 данных, записывающем выполнение второй граничной инструкции), она может сохраняться в начале последовательности инструкций, покрываемой диффграммой 403a (например, в одном или более пакетов 302 данных в/рядом с пакетом 302 данных, записывающем выполнение первой граничной инструкции). Дополнительно или альтернативно, структура данных, представляющая диффграмму 403a, может сохраняться в (или рядом) начале или конце потока 301 данных (например, в качестве части секции потока 301 данных, выделенного данным индексации). Дополнительно или альтернативно, структура данных, представляющая диффграмму 403a, может сохраняться в (или рядом) ключевом кадре, на котором она основана (прямо или косвенно). Другие местоположения хранения также являются возможными. Соответственно, позиции строк, представляющих диффграммы 403 на фиг. 4A, не должны интерпретироваться как указывающие конкретное местоположение, в котором сохраняется структура данных, представляющая диффграмму.

[059] Диффграммы записывают обратимые и составимые преобразования между состоянием программы в начальной граничной инструкции и состоянием программы в последующей конечной граничной инструкции. В вариантах осуществления, эти преобразования применяются к именованным ресурсам, таким как местоположения ячеек запоминающего устройства (например, именованные посредством адреса) и регистры процессора (например, именованные посредством указателя регистра). Эти именованные ресурсы также могут включать в себя менее общие именованные ресурсы, такие как временное запоминающее устройство, которое доступно в некоторых процессорах. Таким образом, например, диффграмма 403a может записывать преобразования для любых именованных ресурсов, которые изменены посредством набора инструкций, из начальной граничной инструкции диффграммы 403a в конечную граничную инструкцию диффграммы 403a, диффграмма 403b может записывать преобразования для любых именованных ресурсов, которые изменены посредством набора инструкций, из начальной граничной инструкции диффграммы 403b в конечную граничную инструкцию диффграммы 403b и т.д. В зависимости от реализации, эти преобразования могут включать в себя преобразования, которые осуществлены посредством одной или обеих граничных инструкций, либо могут исключать преобразования, которые осуществлены посредством одной или обеих граничных инструкций.

[060] Конкретный формат данных преобразования может значительно различаться на основе реализации до тех пор, пока он имеет такие свойства, что он является обратимым в данной диффграмме и составимым с данными преобразования из других диффграмм. Например, предположим, что ключевой кадр 402a записывает значение 0xFFFFFFF0 для конкретного именованного ресурса, регистра A. Поскольку диффграмма 403a основана на этом ключевом кадре 402a, состояние для регистра A в начальной граничной инструкции для диффграммы 403a представляет собой значение 0xFFFFFFF0. Теперь, предположим, что между начальной и конечной граничными инструкциями для диффграммы 403a, значение регистра A изменяется на 0xFFFFFFFA. Дополнительно предположим, что между начальной и конечной граничными инструкциями для диффграммы 403b, значение регистра A изменяется на 0xFFFFFF0A. Данные преобразования для этого именованного ресурса могут содержать все, что указывает, или все, что может использоваться для того, чтобы вычислять надлежащее значение для регистра A на обоих концах диффграмм 403a и 403b.

[061] Например, каждая диффграмма может просто записывать значение для регистра A в начальной и конечной инструкциях. Тем не менее, экономия пространства может достигаться посредством записи преобразования другими способами. Например, диффграмма 403a может записывать первую обратимую математическую операцию (например, "A:+0xA"), которая должна применяться к данным, сохраненным или полученным из базовой линии диффграммы 403a (т.е. ключевого кадра 402a), тогда как диффграмма 403b может записывать вторую обратимую математическую операцию (например, "A:-0xF0"), которая должна применяться к данным, сохраненным или полученным из базовой линии диффграммы 403b (т.е. диффграммы 403a). Таким образом, "суммирование" диффграммы 403a в начальной инструкции для диффграммы 403a может означать получение значения 0xFFFFFFF0 для регистра A из ключевого кадра 402a и затем суммирования 0xA, чтобы получать 0xFFFFFFFA. Дополнительно, "суммирование" диффграммы 403b в начальной инструкции для диффграммы 403b (которая также может соответствовать конечной инструкции диффграммы 403a) может означать вычитание 0xF0 из этого вычисленного значения, чтобы получать 0xFFFFFF0A. Альтернативно, значение регистра A в конечной инструкции диффграммы 403b может быть известным (например, вследствие предшествующего применения диффграмм 403a и 403b или вследствие предшествующего воспроизведения до этой точки в трассировке). Теперь, "вычитание" диффграммы 403b в конечной инструкции для диффграммы 403b может изменять на противоположное направление операции "A:-OxF0" посредством суммирования 0xF0 с 0xFFFDFF0A, чтобы получать 0xFFFFFFFA. Дополнительно, "вычитание" диффграммы 403a в конечной инструкции для диффграммы 403a (которая также может соответствовать начальной инструкции диффграммы 403b) может изменять на противоположное направление операции "A:+0xA" посредством вычитания 0xA из этого вычисленного значения, чтобы получать 0xFFFFFFF0. Хотя простые операции суммирования и вычитания предоставлены в качестве примеров, следует принимать во внимание, что может использоваться любой тип обратимых и составимых преобразований, таких как побитовые операции, битовые вращения и т.д.

[062] В частности, допустимость некоторых именованных ресурсов, таких как запоминающее устройство, может изменяться для диффграмм. Например, код между граничными инструкциями диффграммы может запрашивать то, операционная система должна задавать некоторый адрес или диапазон адресов допустимым или недопустимым. В вариантах осуществления, диффграммы захватывают эти изменения состояния.

[063] Обратимые и составимые диффграммы обеспечивают возможность компоненту 109 отладки быстро резко переходить к произвольным местоположениям в трассировке, быстро перескакивать вперед из одной инструкции в последующую инструкцию и/или быстро перескакивать назад из одной инструкции в предшествующую инструкцию, при уменьшении (или, во многих случаях, исключении) необходимости выполнять воспроизведение в прямом направлении по сравнению с использованием только ключевых кадров. Чтобы демонстрировать эти понятия, фиг. 4A иллюстрирует три интересующие точки (POI): POI 404a, представленную посредством квадрата, POI 404b, представленную посредством окружности, и POI 404c, представленную посредством треугольника. В качестве примеров использования диффграмм для того, чтобы резко переходить к произвольным местоположениям в потоке 401a данных программного потока, если компонент 109 отладки должен резко переходить к инструкции в POI 404a, компонент отладки может просто восстанавливать состояние после ключевого кадра 402b и затем суммировать диффграммы 403c и 403f вообще без необходимости воспроизводить инструкции. Аналогично, если компонент 109 отладки должен резко переходить к инструкции в POI 404c, компонент отладки также может применять диффграмму 403i. Если компонент отладки должен резко переходить к инструкции в POI 404b, компонент отладки может восстанавливать состояние после ключевого кадра 402b и затем суммировать диффграммы 403c, 403f и 403g (вообще без необходимости воспроизводить инструкции), после чего воспроизводить только инструкции между конечной инструкцией диффграммы 403g и рассматриваемой инструкцией.

[064] В качестве примеров использования диффграмм для того, чтобы перескакивать вперед в потоке 401a данных, если компонент 109 отладки уже восстанавливает состояние в POI 404a (например, посредством применения диффграмм и/или посредством воспроизведения трассировки до этой точки), компонент 109 отладки может перескакивать вперед в POI 404b посредством суммирования диффграммы 403g и затем воспроизведения инструкций между конечной инструкцией диффграммы 403g и POI 404b. Альтернативно, если компонент 109 отладки уже восстанавливает состояние в POI 404a, компонент 109 отладки может перескакивать вперед в POI 404c посредством простого суммирования диффграммы 403i. В качестве примеров использования диффграмм для того, чтобы перескакивать назад в потоке 401a данных, если компонент 109 отладки уже восстанавливает состояние в POI 404c, компонент 109 отладки может перескакивать назад в POI 404a посредством простого вычитания диффграммы 403i. Альтернативно, если компонент 109 отладки уже восстанавливает состояние в POI 404c, компонент 109 отладки может перескакивать назад в POI 404b посредством вычитания диффграммы 403i, посредством суммирования диффграммы 403g и посредством воспроизведения инструкций между конечной инструкцией диффграммы 403g и POI 404b.

[065] В вариантах осуществления, могут быть предусмотрены различные типы диффграммы, которые захватывают различные объемы изменений именованных ресурсов. Например, варианты осуществления могут включать в себя "полные" и "частичные" диффграммы. В вариантах осуществления, "полная" диффграмма может содержать преобразования начиная с базовой диффграммы или базового ключевого кадра в именованные ресурсы для всех программных потоков, тогда как "частичная" диффграмма может содержать только преобразования начиная с базовой диффграммы или базового ключевого кадра, которые осуществлены посредством одного программного потока. В вариантах осуществления, полная диффграмма может использовать ключевой кадр или другую полную диффграмму в качестве базовой линии, тогда как частичная диффграмма может использовать ключевой кадр или любой тип диффграммы в качестве базовой линии. Фиг. 4A и 4B предоставляют примеры полных и частичных диффграмм, причем полные диффграммы проиллюстрированы с использованием сплошных линий (т.е. как диффграммы 403a-403c и 403f в потоке 401a данных и диффграммы 403l и 403m в потоке 401b данных), и частичные диффграммы проиллюстрированы с использованием пунктирных линий (т.е. как диффграммы 403d, 403e, 403g-403j в потоке 401a данных и диффграммы 403k и 403n в потоке 401b данных).

[066] Использование полных и частичных диффграмм предоставляет возможность ограничивать число преобразований, сохраненных в диффграмме, при сосредоточении диффграммы на локальной интересующей области в программном потоке. Например, предположим, что POI 404a соответствует первой инструкции рассматриваемой функции в потоке 401a данных, тогда как POI 404c соответствует последней инструкции рассматриваемой функции. Здесь, частичные диффграммы 403g-403i (которые возникают между/в этими двумя POI) могут содержать только преобразования, выполняемые посредством рассматриваемой функции. Пользователи часто заинтересованы в анализе того, как данная функция ведет себя в одном программном потоке, при одновременном, по меньшей мере, временном игнорировании того, что происходит в параллельно выполняющемся программном потоке. Частичные диффграммы 403g-403i могут предоставлять возможность пользователю быстро резко переходить к инструкциям внутри и в конце рассматриваемой функции без необходимости подвергаться дополнительному объему служебной информации для сохранения и отслеживания того, что происходит в программном потоке, трассируемом посредством потока 401b данных в течение временного кадра, в течение которого рассматриваемая функция выполняется. Например, если рассматриваемая функция в потоке 401a данных работает в местоположении X ячейки запоминающего устройства, и если в течение идентичного временного кадра выполнения, программный поток, трассируемый посредством потока 401b данных, работает в местоположении Y ячейки запоминающего устройства, одна или более частичных диффграмм 403g-403i могут сохранять преобразования для местоположения X ячейки запоминающего устройства, но опускать все преобразования для местоположения Y ячейки запоминающего устройства.

[067] Помимо этого (или в качестве альтернативы) наличия полных и частичных диффграмм, варианты осуществления могут применять множество других технологий, чтобы оптимизировать хранение и использование диффграмм. Некоторые из этих вариантов осуществления могут опускать некоторые типы информации из некоторых диффграмм. Например, ABI функции задает то, как устанавливать пролог и эпилог стекового кадра, который типично использует прогнозируемый шаблон считываний и записей в определенные регистры и/или местоположения ячеек запоминающего устройства. Поскольку идентификационные данные этих именованных ресурсов являются прогнозируемыми, и поскольку шаблон считываний и записей в эти именованные ресурсы, является прогнозируемым, варианты осуществления могут восстанавливать состояние для этих именованных ресурсов без фактического сохранения этих преобразований в диффграмме. Помимо этого, частичная диффграмма может опускать любые преобразования для именованных ресурсов, которые модифицируются посредством функции, но которые не имеют реального эффекта за пределами контекста функции, таких как энергозависимые регистры, энергонезависимые регистры, которые не используются за пределами функции, и т.д. Другие варианты осуществления могут использовать различные диффграммы для различных типов именованных ресурсов (например, местоположений ячеек запоминающего устройства по сравнению с регистрами, энергозависимых регистров по сравнению с энергонезависимыми регистрами, стекового запоминающего устройства по сравнению с динамически распределяемым запоминающим устройством, кодового запоминающего устройства по сравнению с запоминающим устройством времени выполнения и т.д.).

[068] В частности, диффграмма может использоваться для определения того, какие именованные ресурсы имеют значение в конечной инструкции диффграммы, отличающееся от значения в начальной инструкции. Таким образом, диффграммы могут использоваться в качестве индексов обратного поиска, чтобы быстро идентифицировать, по меньшей мере, то, поднабор каких кодовых сегментов следует записывать в данный именованный ресурс (например, для определения того, какие кодовые сегменты следует рассматривать при поиске инструкций, которые инициируют точку останова). Тем не менее, наличие информации в отношении того, какие именованные ресурсы имеют значение в конечной инструкции диффграммы, отличающееся от значения в начальной инструкции, может не захватывать все записи. Например, в рамках инструкций, покрываемых диффграммой, одна инструкция может суммировать значение 1 с регистром A, и дальнейшая инструкция может вычитать значение 1 из регистра A. Здесь, значение регистра не должно изменяться из начальной инструкции и конечной инструкции, и в силу этого диффграмма может не содержать преобразование для регистра A. Некоторые варианты осуществления могут добавлять в диффграммы дополнительную информацию, идентифицирующую то, какие именованные ресурс(ы) записываются (или даже считываются) во все инструкции, покрываемые диффграммой. С помощью этой дополнительной информации, диффграммы могут использоваться в качестве индексов обратного поиска для того, чтобы быстро идентифицировать все кодовые сегменты, который записываются (либо затрагивают, если записи включаются) в данный именованный ресурс. В частности, если в трассировке отсутствуют диффграммы или другие индексы обратного поиска, нахождение того, какие инструкции в данном сегменте затрагивают конкретный именованный ресурс, представляет собой линейный поиск (например, воспроизведение каждой инструкции в сегменте). При использовании диффграмм, он может становиться двоичным поиском (например, прохождением по древовидным представлениям на фиг. 4B, чтобы идентифицировать то, какие узлы затрагивают данный именованный ресурс).

[069] Возвращаясь к фиг. 1B, компонент 115 индексации может выполнять один или более типов операций индексации для записанного выполнения 113. Как указано посредством включения компонента 115a формирования диффграмм, эта индексация может включать в себя формирование диффграмм для одного или более записанных выполнений 113. В вариантах осуществления, компонент 115 индексации может работать в качестве независимой задачи (например, прохода "офлайновой" индексации для записанного выполнения 113, которая дополняет записанное выполнение 113 индексными данными, включающими в себя диффграммы), либо может работать в связи с воспроизведением записанного выполнения 113 в качестве части сеанса отладки (например, с индексацией "на лету" трассировочных частей, которые воспроизводятся в качестве части сеанса отладки). Независимо от типа выполняемой индексации, компонент индексации может использовать компонент 116 эмуляции для того, чтобы воспроизводить части записанного выполнения 113 (например, чтобы формировать данные состояния во время выполнения для использования в данных индексации). Поскольку компонент 115 индексации может использовать компонент 116 эмуляции, и поскольку индексация может возникать в качестве части сеанса отладки, предусмотрена двусторонняя стрелка между компонентом 115 индексации и компонентом 116 эмуляции, указывающая то, что любой компонент может использовать другой компонент в качестве части своих операций.

[070] Чтобы иллюстрировать использование офлайн по сравнению с индексацией на лету, на фиг. 4A имеется вероятность того, что диффграммы 403a, 403b, 403c, 403f, 403i и 403j в потоке 401a данных и диффграммы 402d-402f в потоке 401b данных создаются во время прохода "офлайновой" индексации и сохраняются непосредственно в трассировку. Также имеется вероятность того, что диффграммы 403d, 403e, 403g и 403h создаются "на лету" в ходе сеанса отладки, сфокусированного на сегменте в потоке 401a данных между ключевыми кадрами 402b и 402c. Эти диффграммы "на лету" могут временно сохраняться в системном запоминающем устройстве 103 и/или могут постоянно сохраняться в трассировку. Следует принимать во внимание, что создание этих диффграмм "на лету" в ходе воспроизведения может подвергаться небольшому объему служебной информации обработки (т.е. поскольку эти трассировочные секции воспроизведены в любом случае), при одновременном обеспечении возможности компоненту 109 отладки быстро перемещаться в этом кодовом сегменте (который с большой вероятностью должен представлять конкретный интерес) после начального воспроизведения. Хотя диффграммы "на лету" на фиг. 4A показаны в качестве частичных диффграмм, они также могут включать в себя (или исключительно содержать) полные диффграммы; тем не менее, следует принимать во внимание, что создание полных диффграмм на лету может требовать также воспроизведения частей потока 401b данных.

[071] Фиг. 1B показывает компонент 115a формирования диффграмм как включающий в себя компонент 115a-1 идентификации границ, компонент 115a-2 идентификации базовых линий, компонент 115a-3 формирования преобразований и компонент 115a-4 хранения диффграмм. Независимо от того, выполняется индексация офлайн или на лету, компонент 115a-1 идентификации границ может идентифицировать набор инструкций, для которых создастся диффграмма. Это включает в себя идентификацию набора граничных инструкций для диффграммы, включающих в себя начальную граничную инструкцию и конечную граничную инструкцию, с нулем или более промежуточных инструкций.

[072] Хотя компонент 115a-1 идентификации границ может просто идентифицировать границы с регулярными интервалами, в вариантах осуществления компонент 115a-1 идентификации границ также может идентифицировать границы в кодовых местоположениях, которые могут представлять конкретный интерес во время отладки. Они могут включать в себя, например, ABI-границы (например, до и после вызовов функций, до и после вызовов ядра и т.д.), в переходах между программными потоками, при осуществлении вызова конкретных функций или модулей, которые представляют интерес, и т.д. В вариантах осуществления, объем обработки, выделенный идентификации "интересующих" граничных местоположений, может зависеть от типа выполняемой индексации (например, офлайн по сравнению с на лету), доступных ресурсов обработки во время индексации, пользовательских предпочтений и т.д.

[073] При идентификации границ, компонент 115a-1 идентификации границ также может балансировать затраты на включение диффграммы для конкретного набора границ. Эта балансировка может включать в себя, например, балансировку затрат на обработку применения диффграммы затратами на обработку эмуляции инструкций для этого набора границ. Балансировка дополнительно или альтернативно может включать в себя рассмотрение затрат по запоминающему устройству/на хранение для сохранения диффграммы для этого набора границ. Балансировка также рассматривает несколько наборов границ/диффграмм сразу. Например, среднее число преобразований в данной диффграмме с большой вероятностью увеличивается по мере того, как частота диффграмм снижается. Дополнительно, вследствие объема служебной информации для хранения данных каждой диффграммы, одна диффграмма, покрывающая сто инструкций, с большой вероятностью должна быть меньшей в целом, чем сто диффграмм, покрывающих по одной инструкции (т.е. если начальная граничная инструкция и конечная граничная инструкция представляют собой идентичную инструкцию, и диффграмма захватывает изменения именованных ресурсов, осуществленные посредством этой одной инструкции), тогда как сто диффграмм, покрывающих по сто инструкций, с большой вероятностью должны быть больше в целом, чем одна диффграмма, покрывающая десять тысяч инструкций. Таким образом, может быть предусмотрен компромисс между средней частотой диффграммы и средним размером структур данных, сохраняющих преобразования для этих диффграмм.

[074] Компонент 115a-2 идентификации базовых линий может определять то, что использовать в качестве базовой линии для диффграммы для данного набора границ. Как пояснено, диффграмма может использовать ключевой кадр или другую диффграмму в качестве базовой линии. Выбор в отношении того, какой ключевой кадр или диффграмму следует использовать, может быть основан на таких факторах, как число именованных ресурсов, которые изменены по сравнению с данной базовой линией, тип создаваемой диффграммы (например, частичная по сравнению с полной), то, как местоположение базовой линии и текущей диффграммы связано с интересующим местоположением, к примеру, функция и т.д. В частности, для компонента 115a-2 идентификации базовых линий может быть целесообразным выбирать базовую линию (ключевой кадр или диффграмму), которая находится в трассировочном сегменте, отличающемся от трассировочного сегмента, содержащего текущий набор границ. Например, на фиг. 4A, диффграмма 403m, которая находится в трассировочном сегменте между ключевыми кадрами 402e и 402f, основана на диффграмме 403l, которая находится в предшествующем трассировочном сегменте между ключевыми кадрами 402d и 402e (и который в свою очередь основан на ключевом кадре 402d). В качестве примера того, почему это может быть целесообразным, предположим, что функция, A, вызывает другую функцию, B, что ключевой кадр 402d соответствует записи функции A, и строка, соответствующая диффграмме 403m, соответствует выходу функции A, и что ключевой кадр 402e попадает в какое-либо место внутри функции B. Может быть целесообразным создавать диффграмму (или набор диффграмм), которые покрывают всю функцию A (т.е. диффграммы 403l и 403m), поскольку люди зачастую пропускают вызов в A в обоих направлениях; в этом случае, целесообразно перескакивать ключевой кадр 402e в функции B при создании диффграмм.

[075] На основе границ, идентифицированных посредством компонента 115a-1 идентификации границ, и на основе структуры базовой линии (ключевого кадра или диффграммы), идентифицированной посредством компонента 115a-2 идентификации базовых линий, компонент 115a-3 формирования преобразований определяет то, какие именованные ресурсы имеют измененные значения в конечных граничных инструкциях относительно базовой линии, и то, какое преобразование(я) должно преобразовывать значение(я) базовой линии в измененное значение(я). Идентификация этих изменений может включать в себя выполнение воспроизведения от начальной граничной инструкции до конечной граничной инструкции с использованием компонента 116 эмуляции. Как пояснено выше, в вариантах осуществления эти преобразования являются обратимыми, так что преобразование может применяться к (т.е. суммироваться с) состоянию именованного ресурса в начальной граничной инструкции для того, чтобы получать соответствующее состояние для именованного ресурса в конечной граничной инструкции, и может применяться к (т.е. вычитаться из) состоянию именованного ресурса в конечной граничной инструкции для того, чтобы получать соответствующее состояние для именованного ресурса в начальной граничной инструкции. Помимо этого, в вариантах осуществления, эти преобразования являются составимыми, так что цепочка диффграмм может суммироваться и вычитаться совместно.

[076] Компонент 115a-4 хранения диффграмм сохраняет одну или более структур данных, представляющих преобразования, созданные посредством компонента 115a-3 формирования преобразований в соответствующем местоположении, к примеру, в системном запоминающем устройстве 103 (например, в качестве части данных во время выполнения, ассоциированных с воспроизведением трассировки в компоненте 109 отладки) и/или в устройстве 104 долговременного хранения данных (например, в качестве части данных индексации для записанного выполнения 113).

[077] Компонент 116 эмуляции эмулирует код, к которому осуществляется доступ посредством компонента 114b кодового доступа, на основе одного или более записанных выполнений 113, к которым осуществляется доступ посредством компонента 114a трассировочного доступа. Например, компонент 116 эмуляции может содержать или использовать компонент 111 эмуляции по фиг. 1A, чтобы эмулировать код, к которому осуществляется доступ. С использованием компонента 116 эмуляции, компонент 109 отладки может воспроизводить код, к которому осуществляется доступ, при управлении выполнением этого кода с использованием трассируемых значений данных из записанного выполнения 113. Таким образом, компонент 116 эмуляции показан как включающий в себя компонент 116a управления эмуляцией, который может подавать в код всех эмулированных инструкций с кодом трассируемые значения данных, при необходимости, с тем чтобы управлять эмуляцией этих инструкций таким образом, чтобы воспроизводить их трассируемое выполнение.

[078] Компонент эмуляции также показывается как включающий в себя компонент 116b обработки диффграмм, который может включать в себя компонент 116b-1 идентификации диффграмм и компонент 116b-2 применения диффграмм. На основе запроса на то, чтобы воспроизводить/эмулировать конкретную инструкцию (или группу инструкций), компонент 116b-1 идентификации диффграмм идентифицирует набор из одной или более диффграмм, которые могут применяться, чтобы достигать этой инструкции (или группы инструкции). Это может включать в себя, например, идентификацию одной или более диффграмм, которые следует суммировать с ключевым кадром, идентификацию одной или более диффграмм, которые следует суммировать с уже известным состоянием (например, полученным посредством ранее применяемого набора диффграмм и/или полученное посредством предыдущего воспроизведения), или идентификацию одной или более диффграмм, которые следует вычитать из уже известного состояния (например, полученного посредством ранее применяемого набора диффграмм и/или полученного посредством предыдущего воспроизведения). После идентификации соответствующего набора диффграмм (включающих в себя любой зависимый ключевой кадр), компонент 116b-2 применения диффграмм может применять (т.е. суммировать или вычитать) эти диффграммы относительно существующего или восстановленного состояния по мере необходимости.

[079] Компонент 117 вывода может выводить результаты любой эмуляции кода посредством компонента 116 эмуляции. Например, компонент 117 вывода может визуализировать эмуляцию кода, может представлять любое состояние во время выполнения, сформированное через применение диффграмм и/или сформированное через воспроизведение кода, и т.д. В вариантах осуществления, компонент 117 вывода может предоставлять вывод в другой программный компонент, такой как профилировщик или другой компонент в отладочном комплекте.

[080] Следует принимать во внимание, что варианты осуществления, описанные в данном документе, могут использоваться для того, чтобы формировать индексные данные (включающие в себя диффграммы), а также воспроизводить трассировку с базированием на диффграммах. Следует принимать во внимание, что индексация и воспроизведение может рассматриваться в качестве двух различных и независимых способов, и они также могут комбинироваться в один способ.

[081] В соответствии с вариантами осуществления для формирования индексных данных, которые включают в себя диффграммы, фиг. 5 иллюстрирует блок-схему последовательности операций примерного способа 500 для индексации трассировки с диффграммой. Ниже описывается способ 500 в контексте фиг. 1-4B. Хотя, для простоты описания, этапы способа 500 показаны в конкретном последовательном порядке, следует принимать во внимание, что некоторые из этих этапов могут реализовываться в других порядках и/или параллельно.

[082] Как показано на фиг. 5, способ 500 включает в себя этап 501 осуществления доступа к воспроизводимой трассировке. В некоторых вариантах осуществления, этап 501 содержит осуществление доступа к воспроизводимой трассировке, которая записывает предшествующее выполнение одного или более программных потоков объекта. Например, компонент 114 доступа к данным может осуществлять доступ к одному или более записанных выполнений 113 приложения 112 (например, с использованием компонента 114a трассировочного доступа). Как показано на фиг. 3, каждое это записанное выполнение(я) 113 может включать в себя, по меньшей мере, один поток 301 данных, который включает в себя множество пакетов 302 данных; каждый пакет 302 данных может включать в себя часть 304 вводов данных, которая записывает вводы в выполняемые инструкции, которые выполнены в качестве части предшествующего выполнения приложения. Каждый поток 301 данных трассировки может включать в себя пакеты 302 данных, записывающие предшествующее выполнение одного или более программных потоков приложения 112. Например, поток 301a данных трассировки может соответствовать потоку 401a данных по фиг. 4A, тогда как поток 301n данных трассировки может соответствовать потоку 401b данных.

[083] Записанное выполнение(я) 113 может включать в себя предшествующие выполнения "вживую" приложения 112 в процессоре(ах) 102 непосредственно или через управляемую среду выполнения или предшествующие эмулированные выполнения приложения 112 с использованием компонента 116 эмуляции. В связи с этим, на этапе 501, одно или более записанных выполнений 113 могут содержать, по меньшей мере, одно из выполнения "вживую" выполняемого объекта или эмулированного выполнения выполняемого объекта.

[084] Способ 500 также включает в себя этап 502 идентификации поднабора инструкций в рамках трассировочного сегмента. В некоторых вариантах осуществления, этап 502 содержит идентификацию, в рамках трассировочного сегмента, записывающего предшествующее выполнение последовательности из множества инструкций первого программного потока из одного или более программных потоков, поднабора последовательности инструкций, причем поднабор инструкций начинается с первой инструкции и завершается второй инструкцией. Например, компонент 115a-1 идентификации границ может рассматривать один или более сегментов трассируемого выполнения инструкций, с тем чтобы идентифицировать поднабор этих инструкций, для которых формируется соответствующая диффграмма.

[085] Ссылаясь на фиг. 4A, например, компонент 115a-1 идентификации границ может рассматривать, по меньшей мере, часть сегмента инструкций, выполнение которых трассируется между ключевыми кадрами 402b и 402c в потоке 401a данных, и идентифицировать, в пределах этого сегмента, поднабор инструкций, для которых формируется диффграмма (например, диффграмма 403c). Этот поднабор может начинаться с первой начальной граничной инструкции и завершаться второй конечной граничной инструкцией. Например, компонент 115a-1 идентификации границ может идентифицировать поднабор инструкций, начинающихся с первой инструкции после ключевого кадра 402b и завершающихся второй инструкцией в строке, соответствующей диффграмме 403c

[086] В вариантах осуществления, компонент 115a-1 идентификации границ может идентифицировать несколько поднаборов инструкций, для которых формируются диффграммы. Таким образом, например, в способе 500 поднабор инструкций может содержать первый поднабор инструкций, и этап 502 также может включать в себя идентификацию, в рамках трассировочного сегмента, второго поднабора последовательности инструкций, причем второй поднабор инструкций начинается с третьей инструкции и завершается четвертой инструкцией. Например, компонент 115a-1 идентификации границ может идентифицировать второй поднабор инструкций, начинающихся с третьей инструкции в строке, соответствующей диффграмме 403c, и завершающихся второй инструкцией в строке, соответствующей диффграмме 403d. Это может продолжаться для любого числа поднаборов. В зависимости от реализации, вторая инструкция также может представлять собой третью инструкцию, и второе состояние также может представлять собой третье состояние.

[087] Часть идентификации поднабора(ов) инструкций на этапе 503 может включать в себя компонент 115a-2 идентификации базовых линий, идентифицирующий базовую линию для каждого поднабора. Как упомянуто выше, диффграмма может использовать ключевой кадр или диффграмму в качестве базовой линии. Таким образом, в вышеприведенных примерных поднаборах, компонент 115a-2 идентификации базовых линий может идентифицировать ключевой кадр 402b в качестве базовой линии для первого поднабора и может идентифицировать диффграмму 403c (т.е. соответствующую первому поднабору) в качестве базовой линии для второго поднабора.

[088] Способ 500 также включает в себя этап 503 воспроизведения поднабора для того, чтобы получать состояние программы. В некоторых вариантах осуществления, этап 503 содержит воспроизведение поднабора инструкций, идентифицированных на этапе 502, чтобы получать состояние одного или более именованных ресурсов, причем один или более именованных ресурсов имеют первое состояние в первой инструкции и другое второе состояние во второй инструкции. Например, компонент 115a-3 формирования преобразований может использовать компонент 116 эмуляции для того, чтобы воспроизводить выполнение первого поднабора инструкций, которые идентифицированы на этапе 502. На основе этого воспроизведения, компонент 115a-3 формирования преобразований может идентифицировать начальное состояние одного или более именованных ресурсов в начальной инструкции для поднабора и конечное состояние этих именованных ресурсов в конечной инструкции для поднабора.

[089] Если несколько поднаборов идентифицированы на этапе 502, этап 503 может включать в себя воспроизведение каждого из этих поднаборов. Например, если второй поднабор также идентифицирован, этап 503 также может включать в себя воспроизведение второго поднабора последовательности инструкций для того, чтобы получать состояние одного или более именованных ресурсов, причем один или более именованных ресурсов имеют третье состояние в третьей инструкции и другое четвертое состояние в четвертой инструкции. Это может продолжаться для любого числа поднаборов.

[090] Следует отметить, что этап 503 означает состояние "в" инструкции. В зависимости от реализации, термин "в" может означать либо состояние перед выполнением инструкции, либо состояние после выполнения инструкции.

[091] Способ 500 также включает в себя этап 504 формирования диффграммы. В некоторых вариантах осуществления, этап 504 содержит, на основе воспроизведения поднабора инструкций, формирование диффграммы для поднабора инструкций, причем диффграмма структурируется таким образом, что суммирование диффграммы в первой инструкции переводит один или более именованных ресурсов во второе состояние, и вычитание диффграммы во второй инструкции переводит один или более именованных ресурсов в первое состояние. Например, на основе воспроизведения на этапе 503 для поднабора, идентифицированного на этапе 502, компонент 115a формирования преобразований может идентифицировать один или более именованных ресурсов, значения которых изменены между начальным и конечным состоянием для поднабора. Для каждого измененного именованного ресурса, компонент 115a-3 формирования преобразований может формировать преобразование, которое может использоваться для того, чтобы преобразовывать начальное состояние именованного ресурса в конечное состояние именованного ресурса (т.е. для использования при применении преобразования в качестве части суммирования диффграммы) и/или преобразовывать конечное состояние в начальное состояние (т.е. для использования при применении преобразования в качестве части вычитания диффграммы). Таким образом, компонент 115a формирования преобразований может формировать диффграмму, которая содержит преобразования, требуемые для того, чтобы преобразовывать значение(я) любого именованного ресурса(ов), которые изменены посредством поднабора между начальным и конечным значениями именованного ресурса.

[092] Если несколько поднаборов идентифицированы на этапе 502 и воспроизведены на этапе 503, то этап 504 также может включать в себя формирование диффграмм для каждого из этих поднаборов. Таким образом, например, диффграмма, поясненная выше, может представлять собой первую диффграмму, и этап 504 может включать в себя формирование второй диффграммы (например, 403d) для второго поднабора. Таким образом, этап 504 также может содержать, на основе воспроизведения второго поднабора инструкций, формирование второй диффграммы для второго поднабора инструкций, причем вторая диффграмма структурируется таким образом, что суммирование диффграммы в третьей инструкции переводит один или более именованных ресурсов в четвертое состояние, и вычитание диффграммы в четвертой инструкции переводит один или более именованных ресурсов в третье состояние. Это может продолжаться для любого числа поднаборов и диффграмм.

[093] Способ 500 также включает в себя этап 505 сохранения диффграммы. В некоторых вариантах осуществления, этап 505 содержит сохранение диффграммы в связи с трассировкой. Например, компонент 115a-4 хранения диффграмм может сохранять сформированные диффграммы в местоположении, в котором к ним может осуществляться доступ в ходе воспроизведения трассировки. Например, компонент 115a-4 хранения диффграмм может сохранять одну или более диффграмм в устройство долговременного хранения данных, ассоциированное с трассировкой (например, в качестве части записанного выполнения в устройстве 104 долговременного хранения данных), и/или в энергозависимое запоминающее устройство, ассоциированное с воспроизведением трассировки (например, в системное запоминающее устройство 103, используемое посредством компонента 109 отладки).

[094] Как упомянуто выше, диффграммы могут использовать ключевые кадры или другие диффграммы в качестве своей базовой линии. Например, первая диффграмма 403c показана с использованием ключевого кадра 402b в качестве базовой линии (хотя она может альтернативно использовать другую диффграмму в качестве своей базовой линии). Таким образом, в способе 500 первая диффграмма может использовать ключевой кадр в качестве базовой линии, и суммирование диффграммы с ключевым кадром может переводить один или более именованных ресурсов во второе состояние, тогда как вычитание диффграммы во второй инструкции может переводить один или более именованных ресурсов в состояние, сохраненное в ключевом кадре. В этом случае, состояние, сохраненное в ключевом кадре, может содержать первое состояние. Хотя, в этом примере, ключевой кадр базовой линии ассоциирован с трассировочным сегментом, используемым на этапе 502 (т.е. с сегментом от ключевого кадра 402b до ключевого кадра 402c), ключевой кадр базовой линии альтернативно может быть ассоциирован с другим трассировочным сегментом (например, с сегментом от ключевого кадра 402a до ключевого кадра 402b).

[095] Помимо этого, вторая диффграмма 403d показана с использованием диффграммы 403c в качестве базовой линии. Таким образом, в способе 500 вторая диффграмма может использовать первую диффграмму в качестве базовой линии, и вычитание второй диффграммы в четвертой инструкции может переводить один или более именованных ресурсов в третье состояние (которое также может представлять собой второе состояние, в зависимости от реализации). В этом случае, суммирование первой и второй диффграмм в первой инструкции может переводить один или более именованных ресурсов в четвертое состояние, и вычитание первой и второй диффграмм в четвертой инструкции может переводить один или более именованных ресурсов в первое состояние (т.е. поскольку диффграммы являются составимыми). Тем не менее, для второй диффграммы также должно быть возможным использовать ключевой кадр в качестве своей базовой линии. Таким образом, вторая диффграмма альтернативно может использовать ключевой кадр в качестве базовой линии, и вычитание второй диффграммы в четвертой инструкции может переводить один или более именованных ресурсов в состояние, сохраненное в ключевом кадре.

[096] Каждая сформированная диффграмма может представлять собой полную или частичную диффграмму. Таким образом, если первая диффграмма представляет собой полную диффграмму, второе состояние может включать в себя изменение состояния, выполненное посредством второго программного потока из множества программных потоков (например, потока 401b данных) после первой инструкции. Если первая диффграмма представляет собой частичную диффграмму, второе состояние может опускать изменение состояния, выполненное посредством второго программного потока из множества программных потоков (например, потока 401b данных) после первой инструкции. Другими словами, для частичной диффграммы, второе состояние может включать в себя только изменения состояния, выполненные посредством первого программного потока (например, потока 401a данных).

[097] Следует принимать во внимание, что способ 500 может повторяться любое число раз для любого числа программных потоков и/или трассировочных сегментов. В связи с этим, способ 500 может использоваться для того, чтобы создавать каждую диффграмму, показанную на фиг. 4A.

[098] В соответствии с вариантами осуществления для воспроизведения трассировки с базированием на диффграммах, фиг. 6 иллюстрирует блок-схему последовательности операций примерного способа 600 для использования диффграммы для того, чтобы воспроизводить трассировку. Ниже описывается способ 600 в контексте фиг. 1-5. В вариантах осуществления, способ 600 может осуществляться после осуществления способа 500, с использованием всех диффграмм, созданных с использованием способа 500 (например, диффграмм 403a-403o). В связи с этим, способ 600 может рассматриваться как отдельный способ или расширение способа 500, так что способы 500 и 600 составляют части одного более крупного способа, который комбинирует индексацию и воспроизведение. Хотя, для простоты описания, этапы способа 600 показаны в конкретном последовательном порядке, следует принимать во внимание, что некоторые из этих этапов могут реализовываться в других порядках и/или параллельно.

[099] Как показано на фиг. 6, способ 600 включает в себя этап 601 осуществления доступа к воспроизводимой трассировке. В некоторых вариантах осуществления, этап 601 содержит осуществление доступа к воспроизводимой трассировке, которая записывает предшествующее выполнение одного или более программных потоков объекта. Например, этап 601 может работать практически аналогично этапу 501 способа 500.

[0100] Способ 600 также включает в себя этап 602 идентификации целевой инструкции. В некоторых вариантах осуществления, этап 602 содержит идентификацию, в воспроизводимой трассировке, конкретной инструкции в рамках трассировочного сегмента, записывающего предшествующее выполнение последовательности из множества инструкций первого программного потока из одного или более программных потоков, причем множество инструкций включают в себя конкретную инструкцию. Например, компонент 116 эмуляции может идентифицировать интересующую конкретную инструкцию в трассировке, к которой осуществляют доступ на этапе 601. Например, компонент 116 эмуляции может идентифицировать одну из POI 404.

[0101] Способ 600 также включает в себя этап 603 идентификации диффграммы для достижения целевой инструкции. В некоторых вариантах осуществления, этап 603 содержит идентификацию набора из одной или более диффграмм для восстановления предшествующего состояния одного или более именованных ресурсов, которое необходимо для эмуляции предшествующего выполнения конкретной инструкции. Например, компонент 116b-1 идентификации диффграмм может идентифицировать любую диффграмму(ы), требуемую для того, чтобы осуществлять доступ к PIO 404, идентифицированной на этапе 603. Конкретная идентифицированная диффграмма(ы) может зависеть от того, какое предшествующее состояние уже доступно.

[0102] В качестве примера, чтобы резко переходить к POI 404a, компонент 116b-1 идентификации диффграмм может идентифицировать диффграмму 403c (которая основана на ключевом кадре 402b) и диффграмму 403f. Чтобы резко переходить к POI 404b, компонент 116b-1 идентификации диффграмм может идентифицировать диффграммы 403c, 403f и 403g. Чтобы резко переходить к POI 404c, компонент 116b-1 идентификации диффграмм может идентифицировать диффграммы 403c, 403f и 403i.

[0103] В качестве другого примера, если компонент 116 эмуляции уже восстанавливает состояние для POI 404a, компонент 116b-1 идентификации диффграмм может идентифицировать диффграмму 403g, чтобы перескакивать вперед в POI 404b, или идентифицировать диффграмму 403i, чтобы перескакивать вперед в PIO 404c.

[0104] В качестве еще одного другого примера, если компонент 116 эмуляции уже восстанавливает состояние для POI 404c, компонент 116b-1 идентификации диффграмм может идентифицировать диффграмму 403i, чтобы перескакивать назад в POI 404a, или идентифицировать диффграммы 403i и 403g перескакивать назад в PIO 404b.

[0105] Способ 600 также включает в себя этап 604 применения диффграммы. В некоторых вариантах осуществления, этап 604 содержит применение набора из одной или более диффграмм для того, чтобы восстанавливать предшествующее состояние одного или более именованных ресурсов. Например, применение диффграмм может включать в себя суммирование и/или вычитание диффграмм с/из известного/восстановленного состояния. Оно может включать в себя суммирование одной или более диффграмм с известным/восстановленным предшествующим состоянием одного или более именованных ресурсов или вычитание одной или более диффграмм из известного/восстановленного предшествующего состояния одного или более именованных ресурсов. В вариантах осуществления, применение набора из одной или более диффграмм для того, чтобы восстанавливать предшествующее состояние одного или более именованных ресурсов, выполняется вообще без эмуляции инструкций.

[0106] В качестве примера, на этапе 604, применение набора из одной или более диффграмм для того, чтобы восстанавливать предшествующее состояние одного или более именованных ресурсов, может содержать суммирование набора из одной или более диффграмм с состоянием одного или более именованных ресурсов, которое получается из ключевого кадра, ассоциированного с трассировочным сегментом, или в другом трассировочном сегменте. Например, чтобы резко переходить к POI 404a, компонент 116b-2 применения диффграмм может восстанавливать состояние после ключевого кадра 402b и затем суммировать диффграммы 403c и 403f. Чтобы резко переходить к POI 404b, компонент 116b-2 применения диффграмм может восстанавливать состояние после ключевого кадра 402b и затем суммировать диффграммы 403c, 403f и 403g. Чтобы резко переходить к POI 404c, компонент 116b-2 применения диффграмм может восстанавливать состояние после ключевого кадра 402b и затем суммировать диффграммы 403c, 403f и 403i.

[0107] В качестве другого примера, на этапе 604, применение набора из одной или более диффграмм для того, чтобы восстанавливать предшествующее состояние одного или более именованных ресурсов, может содержать суммирование набора из одной или более диффграмм с состоянием одного или более именованных ресурсов, которое получается из другой диффграммы, которая восстанавливает состояние до инструкции, которая находится в/до конкретной инструкции в последовательности инструкций. Например, чтобы перескакивать вперед в POI 404b из POI 404a, компонент 116b-2 применения диффграмм может суммировать диффграмму 403g, и чтобы перескакивать вперед в POI 404c из POI 404a, компонент 116b-2 применения диффграмм может суммировать диффграмму 403i.

[0108] В качестве еще одного другого примера, на этапе 604, применение набора из одной или более диффграмм для того, чтобы восстанавливать предшествующее состояние одного или более именованных ресурсов, может содержать вычитание набора из одной или более диффграмм из состояния одного или более именованных ресурсов в инструкции, которая является последующей относительно конкретной инструкции в последовательности инструкций. Например, чтобы перескакивать назад из POI 404c в POI 404a, компонент 116b-2 применения диффграмм может вычитать диффграмму 403i, и чтобы перескакивать назад из POI 404c в POI 404b, компонент 116b-2 применения диффграмм может вычитать диффграмму 403i, а затем суммировать диффграмму 403g.

[0109] Способ 600 также включает в себя этап 605 воспроизведения целевой инструкции на основе применения диффграмм. В некоторых вариантах осуществления, этап 605 содержит, после применения набора из одной или более диффграмм, эмуляцию предшествующего выполнения конкретной инструкции на основе восстановленного предшествующего состояния одного или более именованных ресурсов. Например, при суммировании и/или вычитании диффграмм на этапе 604, компонент 116 эмуляции может инициировать воспроизведение из точки, достигнутой посредством суммирования/вычитания диффграмм, и использовать компонент 116a управления эмуляцией для того, чтобы управлять выполнением инструкций согласно трассировке.

[0110] В качестве примера, чтобы воспроизводить инструкцию в POI 404a, компонент 116 эмуляции может инициировать воспроизведение в POI 404 после того, как компонент 116b обработки диффграмм восстанавливает состояние из ключевого кадра 402b и суммирует диффграммы 403c и 403f. Чтобы воспроизводить инструкцию в POI 404b, компонент 116 эмуляции может инициировать воспроизведение в или после конечной граничной инструкции для диффграммы 403g после того, как компонент 116b обработки диффграмм восстанавливает состояние из ключевого кадра 402b и суммирует диффграммы 403c, 403f и 403g. Чтобы воспроизводить инструкцию в POI 404c, компонент 116 эмуляции может инициировать воспроизведение в POI 404c после того, как компонент 116b обработки диффграмм восстанавливает состояние из ключевого кадра 402b и суммирует диффграммы 403c, 403f и 403i.

[0111] В качестве другого примера, чтобы воспроизводить инструкцию в POI 404b после перескакивания вперед из POI 404a, компонент 116 эмуляции может инициировать воспроизведение в или после конечной граничной инструкции для диффграммы 403g после того, как компонент 116b обработки диффграмм суммирует диффграмму 403g. Чтобы воспроизводить инструкцию в POI 404c после перескакивания вперед из POI 404a, компонент 116 эмуляции может инициировать воспроизведение в POI 404c после того, как компонент 116b обработки диффграмм суммирует диффграмму 403i.

[0112] В качестве еще одного другого примера, чтобы воспроизводить инструкцию в POI 404a после перескакивания назад из POI 404c, компонент 116 эмуляции может инициировать воспроизведение в POI 404a после того, как компонент 116b обработки диффграмм вычитает диффграмму 403i. Чтобы воспроизводить инструкцию в POI 404b после перескакивания назад из POI 404c, компонент 116 эмуляции может инициировать воспроизведение в или после конечной граничной инструкции для диффграммы 403g после того, как компонент 116b обработки диффграмм вычитает диффграмму 403i и суммирует диффграмму 403g.

[0113] Следует принимать во внимание, что диффграмма(ы), используемая посредством способа 600, может получаться непосредственно из трассировки (например, вставляться посредством процесса офлайновой индексации) и/или из заблаговременного воспроизведения трассировочного сегмента (например, сформированного на лету).

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

[0115] Как упомянуто выше, способы 500 и 600 могут рассматриваться в качестве частей одного большего способа, который комбинирует индексацию и воспроизведение. Чтобы иллюстрировать это, фиг. 7 иллюстрирует блок-схему последовательности операций примерного способа 700 для формирования и использования диффграмм в ходе трассировочного воспроизведения. Ниже описывается способ 700 в контексте фиг. 1-6. Хотя, для простоты описания, этапы способа 700 показаны в конкретном последовательном порядке, следует принимать во внимание, что некоторые из этих этапов могут реализовываться в других порядках и/или параллельно.

[0116] Как показано на фиг. 7, способ 700 включает в себя этап 701 осуществления доступа к воспроизводимой трассировке. В некоторых вариантах осуществления, этап 701 содержит осуществление доступа к воспроизводимой трассировке, которая записывает предшествующее выполнение объекта. Например, этап 701 может соответствовать, в общем, этапу 501 по фиг. 5.

[0117] Способ 700 также включает в себя этап 702 идентификации поднабора инструкций в рамках трассировочного сегмента. В некоторых вариантах осуществления, этап 702 содержит идентификацию, в рамках трассировочного сегмента, записывающего предшествующее выполнение последовательности из множества инструкций объекта, поднабора последовательности инструкций, причем поднабор инструкций начинается с первой инструкции и завершается второй инструкцией. Например, этап 702 может соответствовать, в общем, этапу 502 по фиг. 5.

[0118] Способ 700 также включает в себя этап 703 воспроизведения поднабора для того, чтобы получать состояние программы. В некоторых вариантах осуществления, этап 703 содержит воспроизведение поднабора инструкций для того, чтобы получать состояние одного или более именованных ресурсов, причем один или более именованных ресурсов имеют первое состояние в первой инструкции и другое второе состояние во второй инструкции. Например, этап 703 может соответствовать, в общем, этапу 503 по фиг. 5.

[0119] Способ 700 также включает в себя этап 704 формирования диффграммы. В некоторых вариантах осуществления, этап 704 содержит, на основе воспроизведения поднабора инструкций, формирование диффграммы для поднабора инструкций, причем диффграмма структурируется таким образом, что суммирование диффграммы в первой инструкции переводит один или более именованных ресурсов во второе состояние, и вычитание диффграммы во второй инструкции переводит один или более именованных ресурсов в первое состояние. Например, этап 704 может соответствовать, в общем, этапу 504 по фиг. 5.

[0120] Способ 700 также включает в себя этап 705 идентификации целевой инструкции. В некоторых вариантах осуществления, этап 705 содержит, после формирования диффграммы, идентификацию, в воспроизводимой трассировке, конкретной инструкции в поднаборе инструкций, которая должна воспроизводиться. Например, этап 705 может соответствовать, в общем, этапу 602 по фиг. 6.

[0121] Способ 700 также включает в себя этап 706 идентификации диффграммы для достижения целевой инструкции. В некоторых вариантах осуществления, этап 706 содержит идентификацию сформированной диффграммы для достижения конкретной инструкции. Например, этап 706 может соответствовать, в общем, этапу 603 по фиг. 6.

[0122] Способ 700 также включает в себя этап 707 применения диффграммы. В некоторых вариантах осуществления, этап 707 содержит применение диффграммы во второй инструкции для того, чтобы восстанавливать первое состояние одного или более именованных ресурсов. Например, этап 707 может соответствовать, в общем, этапу 604 по фиг. 6.

[0123] Способ 700 также включает в себя этап 708 воспроизведения целевой инструкции на основе применения диффграмм. В некоторых вариантах осуществления, этап 708 содержит, после применения диффграммы во второй инструкции, воспроизведение поднабора инструкций, включающее в себя воспроизведение конкретной инструкции на основе восстановленного первого состояния одного или более именованных ресурсов. Например, этап 708 может соответствовать, в общем, этапу 605 по фиг. 6.

[0124] Хотя изобретение описано на языке, характерном для структурных признаков и/или технологических этапов, следует понимать, что объем изобретения, определяемый прилагаемой формулой изобретения, не обязательно ограничен описанными признаками или этапами, описанными выше, либо порядком этапов, описанным выше. Наоборот, описанные признаки и этапы раскрываются как примерные формы реализации формулы изобретения.

[0125] Варианты осуществления настоящего изобретения могут содержать или использовать компьютерную систему специального назначения или общего назначения, которая включает в себя компьютерные аппаратные средства, такие как, например, один или более процессоров и системное запоминающее устройство, как подробнее поясняется ниже. Варианты осуществления в пределах объема настоящего изобретения также включают в себя физические и другие машиночитаемые носители для переноса или сохранения машиноисполняемых инструкций и/или структур данных. Эти машиночитаемые носители могу представлять собой любые доступные носители, к которым можно осуществлять доступ посредством компьютерной системы общего назначения или специального назначения. Машиночитаемые носители, которые сохраняют машиноисполняемые инструкции и/или структуры данных, представляют собой компьютерные носители хранения данных. Машиночитаемые носители, которые переносят машиноисполняемые инструкции и/или структуры данных, представляют собой среды передачи. Таким образом, в качестве примера, а не ограничения, варианты осуществления изобретения могут содержать, по меньшей мере, два совершенно различных типа машиночитаемых носителей: компьютерные носители хранения данных и среды передачи.

[0126] Компьютерные носители хранения данных представляют собой физические носители хранения данных, которые сохраняют машиноисполняемые инструкции и/или структуры данных. Физические носители хранения данных включают в себя компьютерные аппаратные средства, такие как RAM, ROM, EEPROM, полупроводниковые накопители (SSD), флэш-память, запоминающее устройство на фазовых переходах (PCM), устройство хранения данных на оптических дисках, устройство хранения данных на магнитных дисках или другие магнитные устройства хранения данных либо любое другое аппаратное устройство(а) хранения данных, которое может использоваться для того, чтобы сохранять программный код в форме машиноисполняемых инструкций или структур данных, к которому может осуществляться доступ и которое может выполняться посредством компьютерной системы общего назначения или специального назначения для того, чтобы реализовывать раскрытую функциональность изобретения.

[0127] Среды передачи могут включать в себя сеть и/или линии связи для передачи данных, которые могут использоваться для того, чтобы переносить программный код в форме машиноисполняемых инструкций или структур данных, и к которым может осуществляться доступ посредством системы общего назначения или специального назначения. "Сеть" задается как одна или более линий связи для передачи данных, которые обеспечивают транспортировку электронных данных между компьютерными системами и/или модулями и/или другими электронными устройствами. Когда информация передается или предоставляется по сети или другим соединениям связи (проводным, беспроводным либо комбинации проводных и беспроводных) в компьютерную систему, компьютерная система может рассматривать соединение в качестве сред передачи. Комбинации вышеперечисленного также следует включать в число машиночитаемых носителей.

[0128] Дополнительно, после достижения различных компонентов компьютерной системы, программный код в форме машиноисполняемых инструкций или структур данных может передаваться автоматически из сред передачи в компьютерные носители хранения данных (или наоборот). Например, машиноисполняемые инструкции или структуры данных, принимаемые по сети или линии связи для передачи данных, могут буферизоваться в RAM в сетевом интерфейсном модуле (например, в NIC) и затем в конечном счете переноситься в RAM компьютерной системы и/или в менее энергозависимые компьютерные носители хранения данных в компьютерной системе. Таким образом, следует понимать, что компьютерные носители хранения данных могут быть включены в компоненты компьютерной системы, которые также (или даже главным образом) используют среды передачи.

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

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

[0131] Специалисты в данной области техники также должны принимать во внимание, что изобретение может осуществляться на практике в облачном вычислительном окружении. Облачные вычислительные окружения могут быть распределенными, хотя это не требуется. Если являются распределенными, облачные вычислительные окружения могут быть распределены по разным странам в пределах организации и/или иметь компоненты, которыми владеют несколько организаций. В этом описании и в прилагаемой формуле изобретения, "облачные вычисления" задаются как модель для обеспечения сетевого доступа по запросу к совместно используемому пулу конфигурируемых вычислительных ресурсов (например, сетей, серверов, устройств хранения, приложений и служб). Определение "облачных вычислений" не ограничено ни одним из множества других преимуществ, которые могут быть получены из такой модели при надлежащем развертывании.

[0132] Модель облачных вычислений может состоять из различных характеристик, таких как самообслуживание по запросу, широкополосный доступ к сети, объединение ресурсов в пул, быстрая эластичность, обслуживание на основе измеряемых показателей и т.д. Модель облачных вычислений также может принимать форму различных моделей предоставления услуг, таких как, например, программное обеспечение как услуга (SaaS), платформа как услуга (PaaS) и инфраструктура как услуга (IaaS). Модель облачных вычислений также может развертываться с использованием различных моделей развертывания, таких как закрытое облако, коллективное облако, открытое облако, гибридное облако и т.д.

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

[0134] Настоящее изобретение может быть осуществлено в других характерных формах без отступления от своей сущности или неотъемлемых характеристик. Описанные варианты осуществления должны рассматриваться во всех отношениях только как иллюстративные, а не ограничивающие. Следовательно, объем изобретения указан посредством прилагаемой формулы изобретения, а не посредством вышеприведенного описания. Все изменения, которые подпадают под смысл и рамки равнозначности формулы изобретения, должны охватываться ее объемом. При введении элементов в прилагаемой формуле изобретения, упоминание элемента в единственном числе служит для указания того, что предусмотрены один или более элементов. Термины "содержащий", "включающий в себя" и "имеющий" имеют намерение быть включающими и означают то, что могут быть предусмотрены дополнительные элементы, отличные от перечисленных элементов.

Похожие патенты RU2815369C1

название год авторы номер документа
СИСТЕМА И СПОСОБ АВТОМАТИЧЕСКОЙ ОБРАБОТКИ СИСТЕМНЫХ ОШИБОК ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ 2012
  • Антух Александр Эдуардович
  • Маланов Алексей Владимирович
RU2521265C2
ЗАПИСЬ ТРАССИРОВКИ НА ОСНОВЕ КЭША С ИСПОЛЬЗОВАНИЕМ ДАННЫХ ПРОТОКОЛА КОГЕРЕНТНОСТИ КЭША 2018
  • Мола, Джорди
RU2775818C2
ТОЧКИ ОСТАНОВА ВОСПРОИЗВЕДЕНИЯ ТРАССИРОВКИ НА ОСНОВЕ КЭША, ИСПОЛЬЗУЮЩИЕ ЗАРЕЗЕРВИРОВАННЫЕ БИТЫ ПОЛЯ ТЕГА 2019
  • Мола, Джорди
RU2769785C1
Способ и устройство для связанной с тайлом адресации при кодировании видеосигнала 2019
  • Ханнуксела Миска
RU2767601C1
СПОСОБ ВЫЯВЛЕНИЯ НЕИЗВЕСТНЫХ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ЭМУЛЯЦИИ ПРОЦЕССА ЗАГРУЗКИ 2011
  • Паршин Юрий Геннадьевич
  • Пинтийский Владислав Валерьевич
RU2472215C1
ЗАПИСЬ ТРАССИРОВКИ ПОСРЕДСТВОМ РЕГИСТРАЦИИ ВХОДЯЩИХ ПОТОКОВ В КЭШ НИЖНЕГО УРОВНЯ НА ОСНОВЕ ЭЛЕМЕНТОВ В КЭШЕ ВЕРХНЕГО УРОВНЯ 2019
  • Мола, Джорди
RU2773437C2
Способ и устройство для связанной с тайлом адресации при кодировании видеосигнала 2019
  • Ханнуксела Миска
RU2783587C2
УСТРОЙСТВО И СПОСОБ ДЛЯ КОДИРОВАНИЯ И ДЕКОДИРОВАНИЯ ВИДЕО 2020
  • Ханнуксела Миска
RU2784900C1
РЕГИСТРАЦИЯ ВХОДЯЩИХ ПОТОКОВ КЭША ПО ЗАПРОСУ В КЭШ БОЛЕЕ ВЫСОКОГО УРОВНЯ 2019
  • Мола, Джорди
  • Габрижелски, Генри
RU2764173C1
РАСШИРЕННОЕ МЕНЮ ПОИСКА И КОНФИГУРАЦИЯ ДЛЯ КОМПЬЮТЕРНЫХ ПРИЛОЖЕНИЙ 2012
  • Джейкоб Сурадж
RU2609075C2

Иллюстрации к изобретению RU 2 815 369 C1

Реферат патента 2024 года ИНДЕКСАЦИЯ И ВОСПРОИЗВЕДЕНИЕ ТРАССИРОВОК С ПЕРЕХОДОМ ПО ВРЕМЕНИ С ИСПОЛЬЗОВАНИЕМ ДИФФГРАММ

Изобретение относится к области вычислительной техники. Технический результат заключается в повышении производительности посредством использования диффграмм для того, чтобы быстро восстанавливать состояние программы, чтобы достигать целевой инструкции. Технический результат достигается за счет того, что воспроизводят поднабор инструкций, чтобы получить состояние одного или более именованных ресурсов, причем один или более именованных ресурсов имеют первое состояние в первой инструкции и другое, второе состояние, во второй инструкции; на основе воспроизведения поднабора инструкций формируют диффграмму для поднабора инструкций, причем диффграмма содержит одну или более обратимых математических операций в отношении первого состояния, которые преобразуют первое состояние во второе состояние, так что суммирование диффграммы в первой инструкции посредством применения одной или более обратимых математических операций к первому состоянию переводит один или более именованных ресурсов во второе состояние, а вычитание диффграммы во второй инструкции посредством применения обратных одной или более обратимых математических операций ко второму состоянию переводит один или более именованных ресурсов в первое состояние; и сохраняют диффграмму в связи с трассировкой. 3 н. и 17 з.п. ф-лы, 9 ил.

Формула изобретения RU 2 815 369 C1

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

осуществляют доступ к воспроизводимой трассировке, которая записывает предшествующее выполнение одного или более программных потоков объекта;

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

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

на основе воспроизведения поднабора инструкций формируют диффграмму для поднабора инструкций, причем диффграмма содержит одну или более обратимых математических операций в отношении первого состояния, которые преобразуют первое состояние во второе состояние, так что суммирование диффграммы в первой инструкции посредством применения одной или более обратимых математических операций к первому состоянию переводит один или более именованных ресурсов во второе состояние, а вычитание диффграммы во второй инструкции посредством применения обратных одной или более обратимых математических операций ко второму состоянию переводит один или более именованных ресурсов в первое состояние; и

сохраняют диффграмму в связи с трассировкой.

2. Способ по п.1, в котором сохранение диффграммы в связи с трассировкой содержит по меньшей мере один из (i) сохранения диффграммы в устройство долговременного хранения данных, ассоциированное с трассировкой, и (ii) сохранения диффграммы в энергозависимое запоминающее устройство, ассоциированное с воспроизведением трассировки.

3. Способ по п.1, в котором диффграмма использует ключевой кадр в качестве базовой линии, причем суммирование диффграммы с ключевым кадром переводит один или более именованных ресурсов во второе состояние, а вычитание диффграммы во второй инструкции переводит один или более именованных ресурсов в состояние, сохраненное в ключевом кадре.

4. Способ по п.3, в котором состояние, сохраненное в ключевом кадре, содержит первое состояние.

5. Способ по п.4, в котором ключевой кадр ассоциирован с трассировочным сегментом.

6. Способ по п.1, в котором второе состояние включает в себя изменение состояния, выполненное посредством второго программного потока из множества программных потоков после первой инструкции.

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

8. Способ по п.1, в котором поднабор инструкций содержит первый поднабор инструкций и диффграмма содержит первую диффграмму, причем способ дополнительно содержит этапы, на которых:

идентифицируют, в трассировочном сегменте, второй поднабор последовательности инструкций, причем второй поднабор инструкций начинается с третьей инструкции и завершается четвертой инструкцией;

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

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

9. Способ по п.8, в котором вторая диффграмма использует ключевой кадр в качестве базовой линии, причем вычитание второй диффграммы в четвертой инструкции переводит один или более именованных ресурсов в состояние, сохраненное в ключевом кадре.

10. Способ по п.8, в котором вторая диффграмма использует первую диффграмму в качестве базовой линии, причем вычитание второй диффграммы в четвертой инструкции переводит один или более именованных ресурсов в третье состояние.

11. Способ по п.8, в котором суммирование первой и второй диффграмм в первой инструкции переводит один или более именованных ресурсов в четвертое состояние, причем вычитание первой и второй диффграмм в четвертой инструкции переводит один или более именованных ресурсов в первое состояние.

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

осуществляют доступ к воспроизводимой трассировке, которая записывает предшествующее выполнение одного или более программных потоков объекта;

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

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

применяют набор из одной или более диффграмм, чтобы восстановить первое состояние одного или более именованных ресурсов; и

после применения набора из одной или более диффграмм эмулируют предшествующее выполнение упомянутой конкретной инструкции на основе восстановленного первого состояния одного или более именованных ресурсов.

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

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

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

16. Способ по п.12, в котором применение набора из одной или более диффграмм для восстановления предшествующего состояния одного или более именованных ресурсов содержит этап, на котором суммируют множество диффграмм с восстановленным предшествующим состоянием одного или более именованных ресурсов либо вычитают это множество диффграмм из восстановленного предшествующего состояния одного или более именованных ресурсов.

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

18. Способ по п.12, дополнительно содержащий этап, на котором идентифицируют, из набора из одной или более диффграмм, один или более именованных ресурсов, которые были модифицированы посредством инструкций, покрываемых набором из одной или более диффграмм.

19. Способ по п.12, в котором при применении набора из одной или более диффграмм для восстановления первого состояния одного или более именованных ресурсов восстанавливают первое состояние одного или более именованных ресурсов без эмуляции каких-либо инструкций.

20. Компьютерная система, содержащая:

процессор; и

машиночитаемый носитель, на котором сохранены машиноисполняемые команды, которые являются исполняемыми процессором для предписания компьютерной системе формировать и использовать диффграммы во время воспроизведения трассировки, причем машиноисполняемые команды включают в себя команды, которые являются исполняемыми процессором для предписания компьютерной системе, по меньшей мере:

осуществлять доступ к воспроизводимой трассировке, которая записывает предшествующее выполнение объекта;

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

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

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

после формирования диффграммы, идентифицировать, в воспроизводимой трассировке, конкретную инструкцию в поднаборе инструкций, которая должна воспроизводиться;

идентифицировать сформированную диффграмму для достижения этой конкретной инструкции;

применять диффграмму во второй инструкции для восстановления первого состояния одного или более именованных ресурсов; и

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

Документы, цитированные в отчете о поиске Патент 2024 года RU2815369C1

US 9959194 B1, 01.05.2018
Способ получения цианистых соединений 1924
  • Климов Б.К.
SU2018A1
Способ получения цианистых соединений 1924
  • Климов Б.К.
SU2018A1
US 9934126 B1, 03.04.2018
СПОСОБ И СИСТЕМА КОНТРОЛЯ ЗА ВЫПОЛНЕНИЕМ ПРОГРАММ С ПОМОЩЬЮ ТРАССИРОВКИ 2011
  • Андрианов Владимир Игоревич
  • Балясов Александр Евгеньевич
  • Бухарин Владимир Владимирович
  • Липатников Валерий Алексеевич
  • Стародубцев Юрий Иванович
RU2459236C1

RU 2 815 369 C1

Авторы

Мола, Джорди

Даты

2024-03-13Публикация

2020-06-17Подача