Перейти к содержанию
    

Неадекватное поведение отладчика в VITIS2019.2

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

 

1. Запускаю дебагер, пошагово выполняю программу. При входе в функцию XEmacPs_BdRingCreate (библиотека "xemacps_bdring.c" драйвера emacps) наблюдаю следующую картину - пошаговый отладчик в линейно написанном коде скачет по строкам как хочет. Условно последовательность выполнения строк может быть - 1-2-3-4-5-10-6-7-15-20-15-16-11-25, итд итп. При том что выполнятся они должны линейно - 1-2-3-4-...-20-21-23-... (ну, за исключением цикла). Код в строчках (если на нее прыгнули) выполняется, переменные переписываются. Вопрос в том что значения этих переменных из-за скачков - не верные. Собственно вопрос - это что за фигня?

2. В этой же функции присутствует цикл на 2 строчки - заполнение адресов цепочки дескрипторов. Ввиду первого пункта этот цикл не выполняется от слова совсем. Счетчик цикла не наращивается. Но было замечено следующее - при удалении объявления переменной счетчика цикла, компилятор не ругается на наличие необъявленной переменной. Компилятор ругается на то что не может найти подключаемую стандартную библиотеку "xil_types.h" в самописной библиотеке, в совершенно другом файле, написанном для работы с микрухой физики. Самописная библиотека до этого была проверена и отлажена. Проверки на двойные включения либ в ней есть. И, собственно, второй вопрос - это что за хрень??? Где связь между необъявленной переменной и включением библиотеки в другом конце кода?????

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, GAYVER сказал:

1. Запускаю дебагер, пошагово выполняю программу... Собственно вопрос - это что за фигня?

Вероятно, программа собрана под ненулевым уровнем оптимизации. В оптимизированной программе зависимости между Си и реальным дизасм-выхлопом ломаются от слова совсем.

По второму пункту - опять же - если смотрите под отладчиком на оптимизации - то занятие бесполезное. На выходе из функции если результат правильный - значит все ок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 минут назад, Arlleex сказал:

Вероятно, программа собрана под ненулевым уровнем оптимизации. В оптимизированной программе зависимости между Си и реальным дизасм-выхлопом ломаются от слова совсем.

По второму пункту - опять же - если смотрите под отладчиком на оптимизации - то занятие бесполезное. На выходе из функции если результат правильный - значит все ок.

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

 

апд

в настройках си билдера оптимизейшен левел - 0. Т.е. выключен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, GAYVER сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, Arlleex сказал:

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

а не подскажете тогда - где смотреть эти настройки?

 

апд

функция возвращает не совсем то, что я ожидаю. собственно поэтому и полез во внутрянку - смотреть что там происходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, тут я только задал направление поисков)) А с эклипса под рукой нет, чтобы точно что-то написать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, Arlleex сказал:

Ну, тут я только задал направление поисков)) А с эклипса под рукой нет, чтобы точно что-то написать...

Не прокатило... Но таки спасибо - сходим в этом направлении 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если код оптимитзирован, а пошагово пройти все-таки нужно, то нужно переключиться в другое View/отображение кода - в ассемблерное. И будете проходить его без всяких непонятных скачков по коду. Обычно нормальные IDE здесь же показывают куски исходного C кода, соответствующие показанным оттранслированным ассемблерным. Так что все хорошо видно и понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как быть со 2 пунктом? где связь между счетчиком цикла и в невозможности включить станадарнтую библиотеку в другом конце кода?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, GAYVER said:

а как быть со 2 пунктом? где связь между счетчиком цикла и в невозможности включить станадарнтую библиотеку в другом конце кода?

А вы посмотрели получившийся после оптимизации ассемлерный код этого цикла? Это не помогло прояснить ситуацию?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 часов назад, Raven сказал:

А вы посмотрели получившийся после оптимизации ассемлерный код этого цикла? Это не помогло прояснить ситуацию?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, GAYVER сказал:

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

Смотрите параметры компилятора при компиляции интересного вам файла. Или есть другой вариант - использовать pragma GCC optimize для выбора нужного вам уровня оптимизации в интересующем вас файле - https://codeforces.com/blog/entry/96344

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю, возможно, поздно, но тем не менее:
В витисе есть рабочий проект со своими настройками оптимизации, а есть т.н. platform project, включающий в себя board support package, в том числе локальные копии драйверов периферии, имеющейся (включенной) в проекте ПЛИС. Так вот они имеют свои уровни оптимизации - по умолчанию -O2, и из диалога изменения bsp это не правится. Я правлю ручками в мейкфайлах (благо, их немного), если захочется полазить дебагером по драйверам. Но это до первого реимпорта xsa-файла из Vivado, потом все возвращается на круги своя.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 17.10.2023 в 04:32, leen сказал:

Не знаю, возможно, поздно, но тем не менее:
В витисе есть рабочий проект со своими настройками оптимизации, а есть т.н. platform project, включающий в себя board support package, в том числе локальные копии драйверов периферии, имеющейся (включенной) в проекте ПЛИС. Так вот они имеют свои уровни оптимизации - по умолчанию -O2, и из диалога изменения bsp это не правится. Я правлю ручками в мейкфайлах (благо, их немного), если захочется полазить дебагером по драйверам. Но это до первого реимпорта xsa-файла из Vivado, потом все возвращается на круги своя.

спасибо. это уже ближе к истине и по конкретике 🙂

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...