реклама на сайте
подробности

 
 
> Отладка и выход за пределы массивов, Как отловить выход за предел массива.
Neo_Matrix
сообщение Apr 6 2018, 20:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 11-04-06
Пользователь №: 16 029



Подскажите, есть ли способ под FreeRTOS понять есть ли выходы за предел массива. Хуки на недостаток хипа и стека работают нормально и очень помогают, когда нужно зажать стек задачи до минимума. Но как отладить выход за пределы массивов? Такая необходимость появилась, так как иногда устройства перезагружаются сами по себе(в обработчиках исключений стоит функция сброса, так как устройства должны максимально быть доступны). Есть подозрение на выход за пределы. Так как проект достаточно крупный около 300кб кода с оптимизацией, пересмотреть, а главное заметить ошибку очень сложно.
Кто, что может порекомендовать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Apr 7 2018, 19:49
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(jcxz @ Apr 7 2018, 22:08) *
. . .
(1) На какую именно ячейку "за пределами"? Если к примеру массив == 10 байт, а размер памяти МК == 1<<32, то на какую из
. . .
(2) . . И как же именно будет видно "через StackCall" или через некие "паттерны" кто порылся в вышеприведённом фрагменте кода???

1 - понятно, что если вылет идет с "фонарным" индексом то это не вариант.
Если же это примитивный "зашкал" по sprintf - то вполне. (кто не пользуется snprintf)

2. Это не мое "изобретение", метода исползуется для контроля использования стека в scmRTOS.
Для чтения за пределами массива - никак. Разве что знать, что считывается определенный адрес и BP поставить на него. Смотреть стек вызовов.
Для чтения более целесообразно смотреть что попадает в [] а не вылавливать последствия. С указателем сложнее.
Код
//    Target-specific configuration macros
//
#ifdef scmRTOS_USER_DEFINED_STACK_PATTERN
#define scmRTOS_STACK_PATTERN scmRTOS_USER_DEFINED_STACK_PATTERN
#else
#define scmRTOS_STACK_PATTERN 0x55aaU
#endif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 7 2018, 20:23
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(k155la3 @ Apr 7 2018, 22:49) *
2. Это не мое "изобретение", метода исползуется для контроля использования стека в scmRTOS.

И что? "Метод" не даёт никакой гарантии. Подумайте, что будет при вызове функции:
Код
void func() {
int m[100];
...
}
если вызов происходит вблизи границы стека. Да и не про стек вопрос автора.

Цитата(k155la3 @ Apr 7 2018, 22:49) *
Для чтения за пределами массива - никак.

Как. Если знать какой CPU у автора. Для Cortex-M я уже написал выше как. Для CPU с MMU - ещё лучше. И чтение и произвольная запись. Именно - произвольная, а не только в следующий адрес после массива.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Apr 8 2018, 14:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(jcxz @ Apr 7 2018, 23:23) *
И что? "Метод" не даёт никакой гарантии. Подумайте, что будет при вызове функции:

Гарантий нет, но в жизни это самый быстрый и действенный способ.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Neo_Matrix   Отладка и выход за пределы массивов   Apr 6 2018, 20:27
- - jcxz   Цитата(Neo_Matrix @ Apr 6 2018, 23:27) По...   Apr 6 2018, 21:57
- - kolobok0   Цитата(Neo_Matrix @ Apr 6 2018, 23:27) .....   Apr 7 2018, 00:19
|- - jcxz   Цитата(kolobok0 @ Apr 7 2018, 03:19) Набе...   Apr 7 2018, 19:08
- - novikovfb   Для начала стоит перенести код в настольный ПК и п...   Apr 7 2018, 04:11
- - k155la3   1. Проработайте код аналитически, тк выход за гран...   Apr 7 2018, 09:14
|- - k155la3   Цитата(jcxz @ Apr 7 2018, 23:23) И что? ...   Apr 8 2018, 13:40
- - Neo_Matrix   Спасибо всем за ответы. Их действительно много и о...   Apr 7 2018, 22:57
|- - kolobok0   Цитата(Neo_Matrix @ Apr 8 2018, 01:57) Сп...   Apr 8 2018, 09:30
- - HardEgor   Цитата(Neo_Matrix @ Apr 7 2018, 03:27) Та...   Apr 8 2018, 04:15
- - Neo_Matrix   Всем спасибо. Ошибка найдена. Функции strncmp при ...   Apr 10 2018, 12:11
|- - jcxz   Цитата(Neo_Matrix @ Apr 10 2018, 15:11) В...   Apr 10 2018, 12:26
||- - haker_fox   QUOTE (jcxz @ Apr 10 2018, 20:26) Вообще ...   Apr 10 2018, 14:51
||- - jcxz   Цитата(haker_fox @ Apr 10 2018, 17:51) А ...   Apr 11 2018, 06:24
||- - haker_fox   QUOTE (jcxz @ Apr 11 2018, 14:24) А чтени...   Apr 12 2018, 15:17
|- - megajohn   Цитата(Neo_Matrix @ Apr 10 2018, 15:11) В...   Apr 10 2018, 12:44
- - Neo_Matrix   Использую Keil. В комплекте с FREERTOS есть демка,...   Apr 10 2018, 14:52


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016