Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
ВнизНайти все вызовы функции с нулевым параметром... Найти похожие ветки
← →
kull (2005-09-19 12:19) [0]Привет, народ!
Передо мной появилась такая задача.
Дано:
function GetBuffer(var P: Pointer; const Size: DWORD): Boolean;
Задача:
Найти в проекте все вызовы этой функции с параметром Size = 0.
Все если Size передается как константа 0, то проблем нет. Но ведь на вход для параметра Size может передаваться переменная с ранее присвоенным значением 0.
Можно было бы писать в лог из этой функции, если Size=0, но используется эта функция в куче мест, и прогнать все вызовы GetBuffer в Runtime просто нереально.
Какие будут предложения, и есть ли у задачи вообще решение?
← →
TUser © (2005-09-19 12:26) [1]Поставить брикпоинты с условием Size = 0 ?
← →
Digitman © (2005-09-19 12:27) [2]
> Можно было бы писать в лог из этой функции, если Size=0,
лучше всего так и поступить
> используется эта функция в куче мест
адрес возврата, лежащий в стеке в момент исполнения тела ф-ции, даст нужную инф-цию о месте в программе, откуда был произведен вызов
← →
kull (2005-09-19 13:42) [3]Или я не понял, или меня не поняли. :)
см. выше.
"...прогнать все вызовы GetBuffer в Runtime просто нереально"
Э... Так что делать?
← →
Digitman © (2005-09-19 13:54) [4]
> или меня не поняли
именно так.
давай уже поясняй термин "прогнать все вызовы".
← →
Владислав © (2005-09-19 14:05) [5]Вариант. Assert(Size <> 0) + call stack.
← →
kull (2005-09-20 10:21) [6]
> Digitman © (19.09.05 13:54) [4]
Поясняю...
Запускается приложение (RunTime) (откомпиленный проект) и либо ручками, либо с помощью автоматических тестов. Проверяются все его функциональности, в которых может быть вызов этой функции. Т.е. все возможные ветви поведения программы с вызовом GetBuffer.
← →
Anatoly Podgoretsky © (2005-09-20 10:26) [7]kull (20.09.05 10:21) [6]
Это логарифмитическая зависимость.
← →
Digitman © (2005-09-20 11:15) [8]
> kull (20.09.05 10:21) [6]
и какие проблемы ?
вставляешь в начало тела ф-ции GetBuffer() код, протоколирующий адрес ее фактического вызова (расчитывается на основе адреса возврата, лежащего в стеке на момент фактической передачи управления ф-ции) и факт.параметры вызова
← →
kull (2005-09-20 12:28) [9]
> Digitman © (20.09.05 11:15) [8]
Так. Поясняю...
Все протоколирующие инструменты в проекте уже есть, вызов можно найти с точностью до номера строки кода. Но...
В проекте куча окон, у окон куча кнопочек, которые вызывают кучу методов.
Из этих методов вызывается вышеуказанная функция.
Вызовов функции > 1000 мест.
Проект очень большой и перенажимать на все кнопочки, чтобы пройти все места где вызывается вышеуказанная функция просто нереально.
← →
Digitman © (2005-09-20 12:47) [10]
> перенажимать на все кнопочки, чтобы пройти все места где
> вызывается вышеуказанная функция просто нереально
ну а раз так, то это значит что нереально пройти все потенциально возможные ветки алгоритма программы
т.е. ты сам себе противоречишь в
> Проверяются все его функциональности, в которых может быть
> вызов этой функции
максимум что можно сделать, это протоколировать инф-цию в след.виде: при нажатии такой-то кнопки (и при таких-то доп.прогр.условиях) в ходе выполнения ее обработчика данная (исследуемая) ф-ция была вызвана (прямо или косвенно) там-то и там-то по тексту проекта, в такой-то временной последовательности и конкретно с такими-то фактическими параметрами
← →
Игорь Шевченко © (2005-09-20 12:50) [11]
> В проекте куча окон, у окон куча кнопочек, которые вызывают
> кучу методов.
> Из этих методов вызывается вышеуказанная функция.
>
> Вызовов функции > 1000 мест.
>
> Проект очень большой и перенажимать на все кнопочки, чтобы
> пройти все места где вызывается вышеуказанная функция просто
> нереально.
Ошибка дизайна
← →
evvcom © (2005-09-20 13:47) [12]Функция для остальной части программы в большинстве случаев должна быть "черным ящиком" и независимо от того, откуда она вызывается, возвращать должна одни и те же результаты при одних и тех же входных параметрах. Так какая разница откуда она вызвалась?
← →
kull (2005-09-20 19:04) [13]
> Игорь Шевченко © (20.09.05 12:50) [11]
Согласен.
Но проблемы не решает, т.к. оный (дизайн) уже в наличии.
> evvcom © (20.09.05 13:47) [12]
Согласен.
И я уже устал убеждать менеджера в этом. К сожалению весь стиль программирования такой, что вызываемый должен предполагать кто его вызывает и зачем, а вызывающий - предполагать что творится внутри функции. Тьфу! Аж тошно. Да ну ето все в болото! :(
Вообщем, отфильтровать ответы до краткости, как я и предполагал в начале - решения не существует. Ну если, конечно, только ручками в тупую.
← →
Kolan © (2005-09-21 00:18) [14]
> убеждать менеджера в этом
Он то чё лезет. Он за сроки(итд) в ответе, а не за архитектуру приложения.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c