Наблюдаемые выражения #
В процессе отладки можно отслеживать значения различных выражений (переменных), получаемых на текущем этапе исполнения программы. Для этого предназначена правая часть вкладки окна «Инструменты». Чтобы отслеживать значения выражения, добавьте его в наблюдаемые:
- Во время отладки установите курсор на выражение в исходном коде и нажмите » Добавить наблюдение» в контекстном меню.
- Нажмите » Добавить» в контекстном меню правой части вкладки «Отладка». Далее введите имя выражения в появившейся строке.
- Чтобы изменить название отслеживаемого выражения, дважды нажмите на него мышью.
В окне наблюдения за выражениями можно выполнять простые математические вычисления (сложение, вычитание, умножение и деление), а также просматривать значения в конкретных точках массива, например, указав запись A, где A — это название массива, а 3 и 4 — это позиции в его измерениях. При добавлении объектов в наблюдаемые выражения можно показать список их членов, указав в конце точку или нажав клавиши «Ctrl+Space»:
Для просмотра содержимого массива или объекта дважды нажмите на него в окне наблюдения.
По умолчанию, целые числа отображаются в окне наблюдения в десятичном виде. Чтобы вывести значение в двоичном или шестнадцатеричном виде, в поле «Выражение» укажите через запятую модификатор b или x соответственно.
Точки останова #
Точка останова — это команда, срабатывающая при переходе исполнения программы к указанной строке, и останавливающая ее выполнение в этом месте. Точки останова позволяют исследовать поведение программы в указанном участке кода: просмотреть значения переменных, стек функций. В дальнейшем процесс отладки может быть возобновлен или прекращен.
Перед запуском отладки установите хотя бы одну точку останова в коде программы. Для этого дважды щелкните мышью на сером поле слева от строки с кодом. Также вы можете установить курсор в строку и нажать » Переключить точку останова» в меню или «F9». Выключение точек останова происходит таким же образом.
Чтобы быстро перейти к точке, в которой остановлено исполнение программы, дважды нажмите на функцию в окне просмотра стека вызовов. Также через контекстное меню этого окна можно перейти к просмотру списка всех точек останова в отлаживаемой программе:
К любой из точек также можно перейти двойным кликом на ней.
Архитектура процесса отладки
Новая архитектура отладки выглядит следующим образом:
В отладке участвуют отладчик, предметы отладки и новый элемент — сервер отладки.
Прямой передачи информации между отладчиком и предметами отладки нет. Всё взаимодействие организуется через сервер отладки. Это основной элемент механизма. На сервере отладки организована очередь сообщений, через которую отладчик и предметы отладки передают информацию друг другу.
И сам отладчик, и предметы отладки взаимодействуют с сервером отладки по протоколу HTTP
Таким образом теперь неважно, где эти предметы отладки расположены.. Взаимодействие с сервером отладки выполняется по инициативе отладчика и предметов отладки
Для этого организуются дополнительные соединения. Их основное назначение — узнать, не появилась ли для них информация на сервере отладки. И если появилась, получить эту информацию.
Взаимодействие с сервером отладки выполняется по инициативе отладчика и предметов отладки. Для этого организуются дополнительные соединения. Их основное назначение — узнать, не появилась ли для них информация на сервере отладки. И если появилась, получить эту информацию.
Таким образом, взаимодействие получается одностороннее. Информация всё время передаётся с сервера отладки в отладчик, и в предметы отладки.
Решение
Прежде всего, я не вижу никаких вопрос Вот. Это не проблема с компилятором C ++ или компоновщиком.
Что здесь происходит на самом деле, когда ваша исполняемая программа не видит явного вызова модуля — в вашей статической библиотеке, он не будет ссылаться на модуль.
Если программе требуется символ, определенный в модуле, этот модуль будет связан; если нет, это будет пропущено. Таким образом, любые функции, символы в Модуль никогда не будет существовать.
считается неиспользуемым модулем.
Поскольку символы не были загружены для модуля, Visual Studio заканчивает тем, что сообщает, что точки останова не будут достигнуты. Что очевидно.
Когда вы вручную зарегистрировали пакет с помощью модуля переводчика в приложении, модуль был связан, и точка останова была доступна. Вы смогли поразить точки останова в этом модуле.
Кстати, это верно для любой программы, любые синтаксические ошибки приведут к ошибке компиляции. Я понимаю, что вы сделали это, чтобы проверить, правильно ли загружалась ваша программа, но это не проблема.
Обновить @Vite Falcon Я рад, что мой ответ дал вам подсказку, чтобы выяснить, почему точка останова не была активной. Очевидно, именно компилятор оптимизировал вызовы встроенных функций и разрывал связь между модулем и программой.
2
Эта проблема
У меня есть файл C ++ (* .cpp), который является частью проекта статической библиотеки, и я не могу поставить активную точку останова. Когда я это делаю, он дает мне уведомление, увиденное в заголовке этого поста. Я могу поставить точки останова в любом другом файле C ++ в этом же проекте, и он будет сбит во время отладки.. В этом файле C ++ нет ничего особенного. Я использую CMake для генерации проектов и также ссылаюсь на класс в исполняемом проекте. Нет ошибок компоновки, просто тот отладчик говорит, что для этого исходного файла не было загружено никаких символов отладки. Я попробовал несколько способов, чтобы попытаться диагностировать, что не так, и у меня нет хорошего ответа о том, что происходит в моем случае.
Запуск отладки #
Для запуска отладки откройте или проект. Отладку можно производить в двух режимах:
- На реальных данных. Запускается командой » Начать на реальных данных» в меню или клавишей «F5». В этом режиме отлаживаемая программа запускается на в торговой платформе. Отладка осуществляется в реальных условиях на ценовых данных, поступающих от сервера.
- На исторических данных. Запускается командой » Начать на исторических данных» в меню или клавишами «Ctrl+F5». В этом режиме программа запускается в тестере стратегий. Он позволяет проверить работу на любом интересующем участке истории, не дожидаясь наступления определенных рыночных условий. По умолчанию используется режим невизуального тестирования, чтобы не тратить ресурсы на отрисовку графических элементов. При необходимости вы можете включить визуальный режим в .
Как только исполнение программы в режиме отладки дойдет до строки с точкой останова, оно будет прервано. Строка, на которой остановилось выполнение, будет помечена иконкой . Также в окне «Инструменты» появится вкладка . В левой ее части будет показан функции.
Просмотр стека вызовов #
В стек вызовов заносится информация для возврата управления из подпрограмм (вложенных функций) в программу (основной обработчик события OnInit, OnTick и т.д.). В стеке вы можете посмотреть весь путь от возникновения события в торговой платформе до вызова конкретной функции.
Для каждой функции отображается следующая информация:
- Название файла, из которого была вызвана функция.
- Название функции.
- Номер строки в файле, где эта функция была вызвана.
Пошаговая отладка
Для пошаговой отладки с просмотром стека вызовов используются команды меню «Отладка» или панели инструментов «Стандартная»:
- Шаг с заходом — пройти один шаг выполнения программы с заходом в вызываемые функции. Это же действие выполняется клавишей «F11».
- Шаг с обходом — пройти один шаг выполнения программы без захода в вызываемые функции. Это же действие выполняется клавишей «F10».
- Шаг наружу — переход к выполнению одного шага программы на один уровень выше. Это же действие выполняется клавишами «Shift+F11».
Команды пошаговой отладки можно использовать только после приостановки выполнения программы в режиме отладки:
- После срабатывания точки останова.
- После приостановки программы вручную командой » Приостановить» в меню или клавишей «Break».
Наступление событий в торговой платформе продолжается, даже когда программа находится в точке останова. Все наступившие события устанавливаются в очередь, и их обработка экспертом будет продолжена после выхода из кода текущего обработчика события. |
Типичные сценарии отладки
С точки зрения прикладного разработчика типичные сценарии отладки не изменились. Единственным значительным отличием является то, что новый механизм отладки нужно включить. Потому что по-умолчанию он выключен.
Несмотря на это имеет смысл познакомиться с тем, что происходит теперь при запуске отладки. Потому что это может быть полезно вам в каких-то нестандартных сценариях работы.
Подключение предметов отладки
При запуске отладочных сеансов из конфигуратора, приложения выполняют автоматическое подключение предметов отладки (как клиентского, так и серверного) к серверу отладки.
При этом, как и раньше, у вас есть возможность настроить в конфигураторе автоматическое подключение предметов отладки независимо от того, каким образом они были запущены. Теперь эти возможности стали гораздо богаче.
Во-первых, теперь платформа предлагает вам для выбора все возможные предметы отладки.
А во-вторых, появился ещё один, более тонкий способ настройки. Это использование заранее созданных отборов.
Такие отборы вы можете использовать как при подключении предметов отладки, так и для просмотра доступных предметов отладки.
В отборе, кроме самих предметов отладки, вы можете указать конкретных пользователей, чьи сеансы вас интересуют, а также, если используется разделение данных, указать область информационной базы, которая будет отлаживаться.
Изменение переменных, свойств объектов и асинхронные вычисления выражений
Новый механизм отладки позволяет вам изменять значения переменных в процессе отладки. В прежнем механизме такая возможность отсутствовала.
Для удобного просмотра и изменения локальных переменных, что представляется наиболее частой задачей, мы реализовали окно «Локальные переменные».
Внешне оно очень похоже на привычное вам «Табло». Но, во-первых, это окно уже автоматически заполнено всеми локальными переменными, а во-вторых, значения переменных вы можете теперь менять.
Значения примитивных типов вы можете изменить прямо в ячейке «Значение»:
А для изменения других значений вы можете воспользоваться окном ввода выражений:
Приятным бонусом является то, что в этом окне полностью функционирует контекстная подсказка.
Точно таким же образом вы можете изменять и значения любых (не только локальных) переменных, свойств, доступных для записи. В окне вычисления выражений (которое вызывается командой Shift+F9) вы можете менять значения переменных как в ячейке «Значение», так и с помощью отдельного диалога.
Кстати, само вычисление выражений теперь выполняется асинхронно. Это означает, что конфигуратор заказывает вычисление предмета отладки. И некоторое время это вычисление ожидается на сервере. Если вычисление выполнено, то результаты сразу поступают в конфигуратор. Если вычисление выполняется продолжительное время, то результаты этих вычислений асинхронно приходят в конфигуратор позже. Такой подход позволяет вам не ожидать длительных вычислений в конфигураторе, и продолжить свою работу.