![>](style_images/1/nav_m.gif)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.199.35] |
![]() |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Борюсь с ошибкой которая возникает в расчетной программе через много часов работы. (С++ Builder 6.0) Удалось подсмотреть, что переменная, назовем ее X, иногда принимает совершенно неосмысленные значения типа NAD. Возникло подозрение, что кто-то, возможно, массив, выходит за дозволенные границы. Как найти возможных кандидатов? Как найти переменные от адреса переменой X и ниже? PS: Code Guard ничего не дал, многочасовое висение 'On Change' на переменной X тоже ничего не дало. |
Сообщ.
#2
,
|
|
|
Завести (если можно) внаглую левую переменную с адресом за адресом X и поставить в отладке слежение за её изменением. Тогда выход поймается.
|
Сообщ.
#3
,
|
|
|
Идея интересная, если сработает то, что редом описанные переменные будут иметь соседние адреса.
|
Сообщ.
#4
,
|
|
|
Можно обязать сделать сие (адреса рядом), засунув X и X_debug в структуру, а её сделав параллельной с объединением union.
![]() Типа: ![]() ![]() union { struct { var X, X_debug; }; char a[N]; } |
Сообщ.
#5
,
|
|
|
Цитата Славян @ Можно обязать сделать сие (адреса рядом), Переменные будут рядом, если они просто по тексту программы будут рядом. В этом можно будет на всякий случай убедиться, просто выводя их адреса. --- Используя статьи: Пишем свой отладчик под Windows [часть 1] Пишем свой отладчик под Windows [часть 2] Writing Windows Debugger - Part 1 Writing Windows Debugger - Part 2 Изучаем отладчик, часть первая Изучаем отладчик, часть вторая Изучаем отладчик, часть третья пишем свой собственный отладчик. Ставим ВР на адрес памяти переменной X. Будем получать события, выбирать из них работу именно с этой переменной, читать её и сравнивать результат с допустимым. Как только результат не понравится, считаем контекст и, таким образом, узнаем адрес выполнения в программе, откуда произошла неправильная коррекция переменной. Заодно сравним этот адрес с адресом (адресами) откуда производилась правильная коррекция переменной. Ещё можно спасти кусок образа памяти, вокруг адреса места неправильного вызова. Что, возможно, облегчит поиск паталогии в исходных текстах. --- Если всё получится (как описано в статьях) это будет очень полезный инструмент. |