Jump to content

    

Место зависания отладчика

1 час назад, Darth Vader сказал:

Сделать поиск имени функции по всему проекту пробовали? Сколько нашлось?

Два.

В названии описания функции и название самой функции. 

ЗЫ. В описании то, что я назвал блоком программы, называется модулем.

Edited by ART_ME

Share this post


Link to post
Share on other sites

 Чудес не бывает. Если имя функции не находится в коде и вечновисящий отладчик не останавливается на брикдауне (а почему не брикапе?), то очевидно она не работает? В map-файле ещё можно поискать.

Share this post


Link to post
Share on other sites
33 minutes ago, ART_ME said:

Два.

В названии описания функции и название самой функции. 

ЗЫ. В описании то, что я назвал блоком программы, называется модулем.

 

Вызов функции может быть запрятан в макрос. Причем даже не в "прямом" виде, а как "сборка слагаемых" препроцессором (как в FreeRTOS).

Найти такое поиском "в лоб" невозможно.

Функция может также вызываться по указателю на функцию.

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

Для таких исследований - скопируйте ВСЕ файлы кода и заголовков из каталога проекта в ОДИН файл :) и ищите в нем. В противном случае

всегда есть вероятность что-то пропустить и не найти.

ps поищите упоминание ф-ий в map-файле.  Там же можно найти (если включить максимальный уровень детализации листинга) и "вложенности" вызовов функций. (метка функции и перечень ф-ий, которые из нее вызываются)

 

Share this post


Link to post
Share on other sites
12 часов назад, k155la3 сказал:

Вызов функции может быть запрятан в макрос.

Так оно и оказалось.

Спасибо.

Share this post


Link to post
Share on other sites
Just now, ART_ME said:

Так оно и оказалось.

Т.е. макрос клеил имя для функции, иначе вы бы нашли её по имени.

Share this post


Link to post
Share on other sites
13 часов назад, VladislavS сказал:

 Чудес не бывает. Если имя функции не находится в коде и вечновисящий отладчик не останавливается на брикдауне (а почему не брикапе?), то очевидно она не работает? 

Тут непонятки:

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

- если поставить еще один брейкпоинт в майн перед установкой переменной, разрешающей запуск этой функции и повторно запустить RUN, то программа в эту функцию попадает. 

И да, искомая функция вызывается по прерыванию.

Или это нормально?

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

Т.е. макрос клеил имя для функции, иначе вы бы нашли её по имени.

Насколько я понял, да.

Edited by ART_ME

Share this post


Link to post
Share on other sites
21 minutes ago, ART_ME said:

Или это нормально?

Что-то странное у вас происходит. Поставьте брейк в окне дизассемблера. Адрес функции можно узнать в map-файле. По идее должно всегда там останавливаться при вызове функции. В вашем случае возможно оптимизация кода создаёт подобные эффекты. Можете её отключить, это делается в свойствах проекта -> "c/c++ compiler" -> "optimization". Выбираете там "NONE".

Share this post


Link to post
Share on other sites
32 минуты назад, ART_ME сказал:

перед установкой переменной, разрешающей запуск этой функции

Где в коде используется переменная, разрешающая запуск функции, тоже никак не найти? Что-то не верится...

32 минуты назад, ART_ME сказал:

И да, искомая функция вызывается по прерыванию

И сколько у вас там прерываний, что нельзя было просмотреть их все за это время?

Share this post


Link to post
Share on other sites
1 час назад, VladislavS сказал:

Где в коде используется переменная, разрешающая запуск функции, тоже никак не найти? Что-то не верится...

И сколько у вас там прерываний, что нельзя было просмотреть их все за это время?

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

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

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

- если поставить еще один брейкпоинт в майн перед установкой переменной, разрешающей запуск этой функции и повторно запустить RUN, то программа в эту функцию попадает. 

 

Share this post


Link to post
Share on other sites
23 минуты назад, ART_ME сказал:

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

Есть, но после "зависания отладчика"  это неважно.

Share this post


Link to post
Share on other sites
3 часа назад, VladislavS сказал:

Есть, но после "зависания отладчика"  это неважно.

Для флудера - да! 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now