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

Linda Adams
Delphi 7 — это высокоуровневый язык программирования, который обеспечивает разработчикам широкие возможности для создания приложений на операционных системах Windows и Linux. Он отличается своей простотой использования, мощным функционалом и удобством разработки.
Особенности Delphi 7:
1. Интуитивный интерфейс: Delphi 7 предоставляет удобное и интуитивно понятное окружение разработки (IDE), которое позволяет программистам легко создавать графические пользовательские интерфейсы и управлять элементами управления, такими как кнопки, текстовые поля, таблицы и другие.
2. Объектно-ориентированное программирование (ООП): Delphi 7 поддерживает ООП, что позволяет разработчикам создавать модульные и масштабируемые программы. Это позволяет повысить эффективность разработки, облегчает сопровождение кода и повышает его переиспользуемость.
3. Богатый набор компонентов: Delphi 7 предлагает широкий набор готовых компонентов, которые значительно упрощают процесс создания приложений. Эти компоненты включают в себя графические элементы интерфейса, базы данных, сетевые функции, математические операции и многое другое.
4. Мощная интеграция баз данных: Delphi 7 обладает встроенной поддержкой работы с базами данных, позволяющей разработчикам создавать мощные и гибкие приложения, основанные на хранении и обработке данных. Он поддерживает различные форматы баз данных, такие как MySQL, PostgreSQL, Oracle и другие.
5. Многоязыковая поддержка: Delphi 7 позволяет разрабатывать многоязычные приложения, что делает его идеальным инструментом для программирования на разных языках и привлечения международной аудитории.
6. Быстрая компиляция и выполнение: Delphi 7 обеспечивает быструю компиляцию и выполнение программ, что экономит время разработчиков и повышает производительность приложений.
7. Безопасность и надежность: Delphi 7 обладает мощными механизмами безопасности, включая проверку типов, обработку исключений и контроль доступа. Это обеспечивает защиту от ошибок и уязвимостей, что делает приложения, созданные на Delphi 7, более надежными и стабильными.
Delphi 7 является одним из самых популярных языков программирования в мире и используется в различных сферах, включая разработку ПО, создание игр, научные и исследовательские проекты, бизнес-приложения и многое другое. Богатый функционал, простота использования и широкая поддержка делают Delphi 7 незаменимым инструментом для программистов, стремящихся создавать качественные и инновационные приложения.
чего больше отладчиков или языков программирования почему

John Jones
Язык программирования VBA (Visual Basic for Applications) является мощным инструментом, который нашел применение в различных областях разработки программного обеспечения. Благодаря своей гибкости и широкому спектру функциональных возможностей, он стал неотъемлемой частью инфраструктуры многих проектов.
Одним из ключевых преимуществ VBA является его универсальность. Этот язык программирования может быть использован в приложениях Microsoft Office, таких как Excel, Word и PowerPoint, а также в других программных продуктах, поддерживающих VBA. Благодаря этому, программисты могут использовать один и тот же язык для создания и поддержки различных приложений, что упрощает разработку и увеличивает эффективность работы.
Вторым важным аспектом VBA является его интеграция с другими языками программирования. Этот язык может работать бок о бок с другими технологиями, такими как SQL, JavaScript, C# и другими. Такая возможность позволяет создавать сложные и функциональные приложения, которые включают в себя несколько компонентов, разработанных на разных языках программирования.
Третье преимущество VBA — его простота и доступность. Даже начинающий программист может быстро освоить основные концепции и синтаксис этого языка, благодаря чему он может быть использован даже людьми, не имеющими высокой квалификации в области программирования. Это делает VBA идеальным выбором для автоматизации повседневных задач на рабочем месте или в быту.
Необходимо отметить также важность надежности и стабильности VBA. Язык программирования VBA был разработан Microsoft, что гарантирует его совместимость и стабильность с операционными системами Windows. Благодаря этому, приложения на VBA работают непрерывно и надежно, обеспечивая бесперебойную и продуктивную работу пользователя.
Также стоит отметить, что VBA предоставляет возможность эффективной отладки и тестирования разработанных приложений. Встроенные инструменты отладки и возможность использования точек остановки позволяют программистам быстро находить и исправлять ошибки, что значительно ускоряет процесс разработки и повышает качество конечного продукта.
В целом, язык программирования VBA является незаменимым инструментом для разработчиков программного обеспечения на платформе Microsoft. Его простота, универсальность и надежность делают его идеальным выбором для разработки различных приложений и автоматизации повседневных задач. Независимо от уровня квалификации программиста, VBA предоставляет мощные инструменты для создания инновационных IT-проектов.
отладчики или языки программирования чего больше
Отладчики и языки программирования — два важных компонента в разработке программного обеспечения. Отладчики используются для обнаружения и исправления ошибок в коде, тогда как языки программирования определяют синтаксис и семантику, на которых основываются программы. Однако, стоит ли считать один компонент более важным, чем другой?
Когда речь идет о разработке программного обеспечения, отладчики играют важную роль. Они позволяют разработчикам искать ошибки в исходном коде, устанавливать точки останова и анализировать состояние программы в процессе выполнения. Отладчики часто предоставляют функции отслеживания стека вызовов, просмотра переменных и выполнения кода по одной команде или пошагово. Они делают процесс поиска и исправления ошибок более эффективным и быстрым.
Однако, необходимо отметить, что отладчики полностью зависят от языка программирования. Разные языки имеют разные инструменты отладки и возможности. Некоторые языки программирования могут предоставлять расширенные отладочные функции, такие как автоматическое отслеживание и анализ поведения программы, поддержку многопоточности и многопроцессорности, а также визуальное представление вызовов функций и стека данных. Другие языки, особенно те, которые являются старыми и устаревшими, могут иметь ограниченные возможности отладки.
Таким образом, можно сказать, что важность отладчиков и языков программирования в разработке программного обеспечения тесно связана друг с другом. Отладчики предоставляют инструменты для поиска и исправления ошибок, но эффективность их работы зависит от возможностей самого языка программирования. В идеале, разработчики должны выбирать языки программирования, которые обладают мощными инструментами отладки, чтобы сделать процесс разработки и сопровождения программного обеспечения наиболее эффективным и продуктивным.
В заключение, можно сказать, что оба компонента — отладчики и языки программирования — имеют свою важность в разработке программного обеспечения. Чтобы достичь оптимальных результатов, необходимо выбирать языки программирования с расширенными возможностями отладки и использовать отладчики для быстрого обнаружения и исправления ошибок. Комбинация этих двух компонентов обеспечит высокую производительность и надежность программного обеспечения.
СИСТЕМА ОТЛАДКИ ПРОГРАММ С РАЗЛИЧНЫМИ МОДЕЛЯМИ ВЫЧИСЛЕНИЯ Текст научной статьи по специальности «Компьютерные и информационные науки»
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Аксенов Михаил Владимирович, Сухомлин Владимир Александрович
Данная статья посвящена вопросам отладки — поиска ошибок в программе — для современных языков программирования высокого уровня. В настоящее время насчитываются десятки различных языков с различными парадигмами программирования и различными моделями вычисления , и для каждого из них актуален вопрос анализа программы во время ее исполнения. Для большинства языков программирования существуют отладочные инструменты, дающие такую возможность, однако отладка программы, состоящей из частей на нескольких языках, вызывает серьезные трудности. В статье приводится анализ средств отладки программ для различных языков программирования. Сформулированы минимальные требования к отладчику . Исследованы основные подходы к реализации отладчиков для базовых моделей вычисления — компиляции, интерпретации и динамической компиляции. Выявлены недостатки применения существующих инструментов к отладке программ, совмещающих в себе две различные модели вычисления . Описана система, позволяющая решить выявленную проблему путем объединения возможностей отладчиков каждого из языков. Осуществлена программная реализации описанной системы для отладки программ, комбинирующих языки C# и C++. Протокол взаимодействия отладчиков , лежащий в основе системы, не зависит от реализации ее компонентов и может быть использован для других сочетаний языков.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Аксенов Михаил Владимирович, Сухомлин Владимир Александрович
ОТЛАДЧИК ПАРАЛЛЕЛЬНЫХ ПРОГРАММ ДЛЯ ОС LINUX
Подход к проведению динамического анализа Java-программ методом модификации виртуальной машины Java
Проблемы отладки многопроцессных систем
Методы повышения производительности обратной отладки
Внесение неисправностей в программу с использованием детерминированного воспроизведения
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
DEBUGGING SYSTEM FOR PROGRAMS WITH DIFFERENT EXECUTION MODELS
This article is devoted to the issues of debugging programs in modern high-level languages. There are many different languages with different paradigms and different execution models. Each of them needs an instrument to analyze a program during its execution. For most programming languages, there are debugging tools that provide this capability, but debugging a program that consists of several parts in different programming languages is very difficult. The article contains an analysis of the tools for debugging programs for various programming languages. We provide the minimum requirements for the debugger and describe the main approaches to the implementation of debuggers for basic computation models — compilation, interpretation and dynamic compilation. The drawbacks of using existing tools for debugging programs that combine two different computation models are identified. As a solution, we propose a system that allows us to debug such programs by combining the capabilities of the debuggers for each of the languages. The software implementation of the described system for debugging programs combining the C # and C ++ languages has been developed. The debugger interaction protocol underlying the system does not depend on the implementation of its components and can be used for other combinations of languages.
Текст научной работы на тему «СИСТЕМА ОТЛАДКИ ПРОГРАММ С РАЗЛИЧНЫМИ МОДЕЛЯМИ ВЫЧИСЛЕНИЯ»
ИССЛЕДОВАНИЯ И РАЗРАБОТКИ В ОБЛАСТИ НОВЫХ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И ИХ ПРИЛОЖЕНИЙ
Система отладки программ с различными моделями вычисления
М. В. Аксенов*, В. А. Сухомлин
ФГБОУ ВО «Московский государственный университет имени М. В. Ломоносова», г. Москва, Рос-
119991, Россия, г. Москва, ГСП-1, Ленинские горы, д. 1 * miaks1511@mail.ru
Данная статья посвящена вопросам отладки — поиска ошибок в программе — для современных языков программирования высокого уровня. В настоящее время насчитываются десятки различных языков с различными парадигмами программирования и различными моделями вычисления, и для каждого из них актуален вопрос анализа программы во время ее исполнения. Для большинства языков программирования существуют отладочные инструменты, дающие такую возможность, однако отладка программы, состоящей из частей на нескольких языках, вызывает серьезные трудности.
В статье приводится анализ средств отладки программ для различных языков программирования. Сформулированы минимальные требования к отладчику. Исследованы основные подходы к реализации отладчиков для базовых моделей вычисления — компиляции, интерпретации и динамической компиляции. Выявлены недостатки применения существующих инструментов к отладке программ, совмещающих в себе две различные модели вычисления. Описана система, позволяющая решить выявленную проблему путем объединения возможностей отладчиков каждого из языков. Осуществлена программная реализации описанной системы для отладки программ, комбинирующих языки С# и С++. Протокол взаимодействия отладчиков, лежащий в основе системы, не зависит от реализации ее компонентов и может быть использован для других сочетаний языков.
Ключевые слова: отладка, отладчик, виртуальная машина, модель вычисления.
Для цитирования: Аксенов, М. В. Система отладки программ с различными моделями вычисления / М. В. Аксенов, В. А. Сухомлин. — DOI 10.25559^ГПТО.16.202002.389-397 // Современные информационные технологии и ИТ-образование. — 2020. — Т. 16, № 2. — С. 389-397.
Контент доступен под лицензией Creative Commons Attribution 4.0 License. The content is available under Creative Commons Attribution 4.0 License.
Modern Information Technologies and IT-Education
RESEARCH AND DEVELOPMENT IN THE FIELD OF NEW IT AND THEIR APPLICATIONS
Debugging System for Programs with Different Execution Models
M. V. Aksenov*, V. A. Sukhomlin
Lomonosov Moscow State University, Moscow, Russia 1, Leninskie gory, Moscow 119991, Russia * miaks1511@mail.ru
This article is devoted to the issues of debugging programs in modern high-level languages. There are many different languages with different paradigms and different execution models. Each of them needs an instrument to analyze a program during its execution. For most programming languages, there are debugging tools that provide this capability, but debugging a program that consists of several parts in different programming languages is very difficult.
The article contains an analysis of the tools for debugging programs for various programming languages. We provide the minimum requirements for the debugger and describe the main approaches to the implementation of debuggers for basic computation models — compilation, interpretation and dynamic compilation. The drawbacks of using existing tools for debugging programs that combine two different computation models are identified. As a solution, we propose a system that allows to debug such programs by combining the capabilities of the debuggers for each of the languages. The software implementation of the described system for debugging programs combining the C # and C ++ languages has been developed. The debugger interaction protocol underlying the system does not depend on the implementation of its components and can be used for other combinations of languages.
Keywords: debug, debugger, virtual machine, compute model.
For citation: Aksenov M.V., Sukhomlin V.A. Debugging System for Programs with Different Execution Models. Sovremennye informacionnye tehnologii i IT-obrazovanie = Modern Information Technologies and IT-Education. 2020; 16(2):389-397. DOI: https://doi.org/10.25559/SITITO.16.202002.389-397
Современные информационные технологии и ИТ-образование
Том 16, № 2. 2020 ISSN 2411-1473 sitito.cs.msu.ru
M. V. Aksenov, RESEARCH AND DEVELOPMENT IN THE FIELD
V. A. Sukhomlin OF NEW IT AND THEIR APPLICATIONS
С середины прошлого столетия можно наблюдать стремительное и непрекращающееся развитие вычислительной техники. Параллельно и с такой же большой скоростью развиваются средства разработки программного обеспечения для этих устройств. В результате написание программ в машинных кодах эволюционировало в огромное разнообразие высокоуровневых языков программирования.
Программа на языке высокого уровня преобразуется в машинный код путем трансляции. Трансляцию осуществляет программное средство, называемое транслятором. Именно транслятор позволяет писать программы на высокоуровневом языке, не задумываясь об особенностях конкретной платформы. В настоящее время существует три основных типа трансляции императивных языков программирования — компиляция, интерпретация и динамическая компиляция1 [1].У каждой из этих схем есть как сильные, так и слабые стороны. Для объединения преимуществ тех или иных схем создаются как трансляторы, совмещающие в себе несколько из моделей (к примеру, большинство реализаций виртуальной машины Java [2, 3]), так и программы, отдельные части которых написаны на различных языках программирования с отличающимися моделями трансляции и вычисления. В дальнейшем будем называть такие программы смешанными. Несмотря на удобный инструментарий, предоставляемый языками программирования высокого уровня, при написании на них программ неизбежны ошибки. Поэтому на сегодняшний день цикл разработки программного обеспечения обязательно включает стадию отладки — выявления, локализации и исправления ошибок, сделанных на этапе кодирования [4]. Для этого необходима возможность отслеживать ход исполнения программы и текущие значения переменных, используемых в ней.
В настоящее время существует два основных подхода к отладке ПО. Наиболее интуитивный из них — добавление в исходный код программы вывода информации, интересующей программиста. Далее после запуска необходимо сопоставить полученные промежуточные результаты с исходным кодом, и на основании это сделать вывод о местонахождении ошибки. Такой подход называется журналированием. Отладка с помощью журналирования имеет несколько недостатков. Основные неудобства связаны с необходимостью менять исходную программу, осуществлять трансляцию и запуск, анализировать результаты (и поскольку заранее неизвестно, какая информация поможет выявить ошибку, повторять эти действия несколько раз). При этом повторная трансляция может занимать существенное время, а полученный отладочный вывод зачастую оказывается очень большим и из-за этого трудным для анализа. Кроме того, подобные изменения в программе в некоторых случаях могут привести к побочным эффектам [5], что усложнит поиск ошибки. Из-за наличия вышеперечисленных проблем стали разрабатывать инструментальные средства, предназначенные непосредственно для поиска и исправления ошибок в программе путем изучения ее внутреннего состояния во время выполне-
ния. Такие средства получили название отладчиков. Главной задачей отладчика можно назвать сопоставление внутреннего состояния программы с ее исходным кодом. Это позволяет программисту анализировать промежуточные состояния программы, чтобы понять, в какой момент была допущена ошибка. Разумеется, реализация отладчика зависит от отлаживаемого языка. Более того, далее будет показано, что наиболее радикальные отличия наблюдаются между отладчиками языков с различными моделями трансляции и вычисления. Таким образом, в описанных ранее смешанных программах достаточно трудно искать ошибки, поскольку отдельные их части требуют различных подходов для отладки, а специализированных отладчиков для таких программ на сегодняшний день нет. В данной статье проводится краткий обзор отладчиков для современных языков программирования высокого уровня, а также описывается программная система, позволяющая осуществлять отладку смешанных программ.
На этапе отладки написанной программы после обнаружения ошибки наиболее трудоемкой частью работы является ее локализация — нахождение одного или нескольких мест в программном коде, приводящих к неправильному результату. Несмотря на то, что активно предпринимаются попытки [6, 7, 8] автоматизировать этот процесс, чаще всего программисту приходится вручную исследовать программу для выявления сбоя. В некоторых случаях этот процесс может занять еще больше времени, чем собственно написание кода, поэтому основной задачей отладчика является предоставление максимально удобного функционала для анализа программы.
В настоящее время этот функционал для большинства отладчиков включает в себя [9, 10, 11]:
• просмотр стека вызовов функций;
• изменение значений переменных.
Требования к реализации отладчика
Для реализации функций, требующихся программисту для отладки, отладчик должен иметь возможность управлять выполнением программы. При этом поиск ошибок с помощью отладчика можно производить только в многозадачной системе, так как программа отладчика должна работать во время исполнения отлаживаемой программы.
Как было сказано во введении, в настоящее время существует три основных модели трансляции и вычисления императивных языков программирования — компиляция, интерпретация и динамическая компиляция. В многозадачной системе при каждой из этих схем исполнение транслируемой программы контролируется другой программой. В случае динамиче-
1 Alpern, B. Dynamic type checking in jalapeno / B. Alpern, A. Cocchi, D. Grove // Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium. — Vol. 1 (JVM’01). — USENIX Association, USA; 2001. — Pp. 4. — URL: https://dl.acm.org/doi/10.5555/1267847.1267851 (дата обращения: 12.07.2020).
Modern Information Technologies and IT-Education
ИССЛЕДОВАНИЯ И РАЗРАБОТКИ В ОБЛАСТИ НОВЫХ М. В. Аксенов,
392 ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И ИХ ПРИЛОЖЕНИЙ В. А. Сухомлин
ской компиляции или интерпретации исполнением управляет специализированная виртуальная машина или интерпретатор, тогда как при классической компиляции обязанности контроля за скомпилированной программой возлагаются на операционную систему компьютера.
Поскольку отладчик — отдельная программа, по своей сути ничем не отличающаяся от отлаживаемой, для получения необходимых привилегий он должен уметь взаимодействовать с исполнителем программы, которую должен отлаживать [12]. В свою очередь, исполнитель для обеспечения возможности отладки программ должен предоставлять специализированный интерфейс, через который можно получать информацию о состоянии выполняемой программы, а также влиять на ход ее исполнения. Таким образом, реализация отладчика существенным образом зависит от типа исполнителя и способа взаимодействия с ним [13].
Отладка компилируемых программ
Для компилируемых языков исходный текст программы преобразуется компилятором в исполняемый файл, содержащий машинный код для целевой платформы. При запуске этого файла на исполнение операционная система выделяет программе требуемые ресурсы и время на исполнение, создавая тем самым процесс исполнения [14]. На нее также возлагается обязанность предоставления отладчику интерфейса для контроля над этим процессом [15]. Однако операционная система не имеет представления об исходном коде процесса, он представляется ей лишь как совокупность инструкций и данных. Компиляция программы на языке высокого уровня в машинный код — процесс в общем случае необратимый [16]. Более того, установление соответствия между исходным кодом и исполняемым файлом для просмотра в памяти значений переменных — задача чрезвычайно трудная. Поэтому помимо возможности запросов к операционной системе отладчику нужна дополнительная информация от компилятора [17]. Соответствие нужно установить между строками кода и машинными инструкциями, а также между переменными и ячейками памяти. Информация, как правило, сохраняется в бинарном файле вместе с машинным кодом в специальном формате [18]. Таким образом, характерным требованием для возможности отладки компилируемых программ является предоставление компилятором отладочной информации. Операционная система при этом должна давать возможность читать и модифицировать память отлаживаемого процесса, а также управлять его исполнением.
Отладка интерпретируемых программ
В случае интерпретации исходного кода программа на языке высокого уровня непосредственно исполняется специальной программой, называемой интерпретатором [19]. Таким образом, достигаются простота в распространении программ, отсутствие дополнительного шага в виде компиляции перед запуском, что упрощает разработку. К недостаткам этой схеме относится существенное снижение производительности из-за накладных расходов на исполнение интерпретатора во время исполнения программы [20]. Но задача предоставления
интерфейса отладки при этом не является сложной, поскольку для исполнения интерпретатор хранит внутреннее представление исходной программы. Генерация отладочной информации также не требуется, так как интерпретатор исполняет файлы исходного кода, написанные программистом, и при этом непосредственно оперирует переменными, функциями и строками кода.
Отладка динамически компилируемых программ
Эта модель вычисления выступает компромиссом между быстродействием компиляции и гибкостью интерпретации. Суть ее состоит в следующем. Сначала исходный код программы компилируется в промежуточный платформонезависимый язык (его часто называют байткодом, так как его инструкции кодируются одним байтом [21]). Это позволяет снизить нагрузку на основной компилятор, работающий во время исполнения программы. Затем полученный код загружается в виртуальную машину, задача которой — компилировать промежуточный язык в машинный код и исполнять [22]. Преимущество перед классической компиляцией в том, что компилируются лишь те фрагменты кода, которые должны быть исполнены (как правило, компилируются функции перед вызовом). При этой схеме трансляции в обязанности виртуальной машины входит, как правило, отслеживание хода выполнения программы, обработка вызовов функции из внешних библиотек, а также освобождение памяти, которую программа больше не использует (так называемая сборка мусора) [23, 24]. Поскольку трансляция программы в этом случае комбинирует в себе две уже рассмотренные схемы, в реализации отладчика несложно увидеть знакомые подходы. Для построения соответствия между исходным кодом и выполняемым процессом нужна отладочная информация, так как при компиляции в байткод теряется информация об исходных номерах строк и именах переменных. В то же время виртуальной машине необходимо хранить внутреннее представление вызываемых функций, чтобы при необходимости компилировать их и запускать на исполнение. Поэтому при отладке ответственность за предоставление стека вызовов возлагается на нее.
Описание выполнения смешанной программы
Возможность вызова скомпилированного кода из виртуальной машины может существенно упростить написание программы, если требуемый функционал уже реализован на компилируемом языке и доступен в виде программной библиотеки. Также довольно популярным является архитектурное решение, в котором обработка данных приложения производится в компилируемой его части для достижения производительности, а пользовательский интерфейс приложения написан на языке, управляемом виртуальной машиной, для получения возможности быстрой пересборки приложения для смены дизайна и управляющих элементов. На уровне синтаксиса вызывающего языка возможность взаимодействия двух языков представлена как вызов внешней функции. Для этого вызова код должен быть загружен в виртуальную машину, поэтому перед вызовом всегда дается указание динамически подключаемой библиотеки. Далее по данному имени находится нужная функ-
Современные информационные технологии и ИТ-образование
Том 16, № 2. 2020 ^ 2411-1473 sitito.cs.msu.ru
M. V. Aksenov, V. A. Sukhomlin
RESEARCH AND DEVELOPMENT IN THE FIELD OF NEW IT AND THEIR APPLICATIONS
ция в библиотеке, и подготавливается ее вызов. Приготовления регламентированы соглашениями о вызовах2 того языка и архитектуры, для которых скомпилирована функция. Наибольший интерес здесь представляют подготовка и передача параметров для используемой функции, а также возврат результата. Поскольку эта функция написана на вызываемом языке, она ожидает параметры типов именно из этого языка, между тем как в управляемом виртуальной машиной языке соответствующие типы могут иметь отличное от требуемых представление. Поэтому перед вызовом осуществляется преобразование — так называемый маршалинг — параметров из одно го представления вдругой [25]. Так как представления соответствуют,их типов в языках могут быть очень схожими! (к опимвру, стрнпивОолешенспве язындо ынеуетаеляют-ся наборов 2кмвелтв,рлококоженнв1х в дамятт панряд], при мадшолин2к но исегдд прымсоитит сдздание парамелдов еыев1-кнемого языта, соонвутствующихвынывающету тамяно мо-
Поноому насромя вызова ткем-^илк^]:^оев^нотк евдыв иpыдакьнод тдшкна дтлжно кы^йти в спяндальняый реждоработы, чтоуы ын^метры не оыли ^ич-
ртыомз вpaкaенрчeяия из вком-вилддoв2лдoгoрудо ативеереобрагоонние
этоготначения влип, овенс2неш ниртуальной машине.
терфейсу операционной системы, который мог бы помочь в отладке, поскольку предназначен для отладки кроссплатфор-менных приложений. Таким образом, с помощью этого отладчика мы не сможем отследить, какие параметры реально попали в скомпилированный код, и не сможем узнать причину, по которой полученный результат вызванного кода отличается от ожидаемого.
Кадры ■ виртуальной машины
Кадры i-вироальной машины
Р и с. 1. Стек вызовов смешанной программы та языках C# и C++, доступный с помощью C# отладчика Fig.l.Mixedprogramcall stack in C# and C++, accessible via the C# debugger
Трудности отладки смешанной программы
Ранее были описаны подходы к отладке программ с различными моделями вычисления. С помощью этого описания нетрудно понять, что существующие отладчики не дают возможности отследить выполнение смешанной программы на всех ее этапах. В самом деле, сейчас можно использовать отладчик, предназначенный лишь для одной части программы. Если мы берем отладчик управляемого кода, то можем контролировать исключительно ту часть программы, которую исполняет виртуальная машина, поскольку отладчик целиком зависит от ее интерфейса (рис. 1). В нашей программе задача виртуальной машины — лишь подготовить параметры для вызова кода и дождаться результата. И сам отладчик не имеет доступа к ин-
Рис.2.Стеквызовов смешанной программы на языках С# и С++, доступный спомощьюС++отладчика Fi g.2.Mixedprogramcall stack тС# andC++,accessible viatheC++debugger
При применении отладчика скомпилированного кода получаем иную картину. Этот отладчик, имея доступ к интерфейсу операционной системы, дает нам контроль над всей виртуальной машиной, поскольку она является самостоятельным процессом. Но тем не менее, это не дает возможности отлаживать управляемый ей код, поскольку его внутреннее представление в процессе может оказаться очень трудным для понимания программисту, который не знаком с устройством машины, а лишь пользуется ей (а при условии достаточной популярности языка таковых большинство). То есть в большей части осуществляется отладка кода виртуальной машины, а не кода программиста, предназначенного для решения поставленной задачи. Тем не менее, можно отловить участок выполнения процесса, в рамках которого выполняется вызываемый скомпилированный код, и отладить его (рис. 2).
Описаниеразработанной системы для отладкисмешанных программ
Для решения описанных проблем предлагается комбинированная система отладки смешанных программ на компилируемом (С++) и динамически компилируемом (С#) языках программирования. Система реализует описанный выше интерфейс отладчика и позволяет исследовать выполнение смешанной программы, дистанцировавшись от различий в моделях выполнения ее отдельных частей. Основополагающая идея — совместить в одном процессе отладчики соответствующих частей программы, синхронизировать их работу и разделить между ними ответственность за предоставление единого интерфейса для пользователя. Таким образом, в системе можно выделить три главных компонента: отладчик С#, отладчик С++ и управляющий компонент.
2 Fog, A. Calling conventions for different C++ compilers and operating systems / A. Fog. — Technical University ofDenmark, 2019. — URL : https://www.agner.org/ optimize/calling_conventions.pdf (дата обращения: 12.07.2020).
Modern Information Technologies and IT-Education
•JOA И С СЛЕДО ВАЛИЯ И РАЗ РАБОТКИ В О БЛ АСТИ НОВЫХ м, в. Аксе нов,
ЗИТЛ ИНСДЛМАЦИОНТЫЛТЕР НСЛОИК1Й И ИСПРИЛОЖВН1Ы/1 В.Ь.Сухомлин
Р и с. 3. Инициализация системы отладки Fig.3.Debug system initialization
Последовательно рдссмпзрим процесс с^^т^адки с покощью этой системы ипредоатавленкв интерфейса. Дни запусна смез pcaHHoD прог()кммыль отлпикииспельзраося следьющтя схема (риз.Зр.Удравпяющийоопкзнэрк п олнчаео га пнлмповапвяи (ккааестве пользователя чаще всего выступает среда разработки программ, или IDE) запрос на запуск определенной программы. После этого он дает команду отладчику языка C# запустить виртуальную машину с последующей остановкой перед выполнением кода. После остановки к процессу под-мкючазлья опладчикдкя ивнад°дкдлмит воапмлндррс прьм,тс-де. Гдсде этого рправлрющдй нздподкдт ив^/^омл5^еп IDE о б
Для выставлсаияточемостасова 4) уйравлающий том-тснепа, получив соптвьтствующийссттос, опреяккяет, к км ой чассп ммоораммыотнослтся з^пештйтмсю иосто естатовки. Поскольку исходный код программы четко подразделяется на части из компилируемого и управляемого языка, такое определение тривиально. Далее команда на установку передается соответствующему отладчику. При достижении выполнением программы указанного места этот отладчик получит соответ-с тпуюсций сигкал л моредаскемо мправмакщемй кемпоненту, а тотвс вою ойсуед,4 тведомит к(5мтом пользоаатоуя.
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
^[Language — С#] SclBrcakpointfl