Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-1123650590
Anonim
2005-08-10 09:09
2005.10.09
Параметры процесса


9-1117168849
Slavikk
2005-05-27 08:40
2005.10.09
GLScene - классы


6-1118596832
Николай,герм
2005-06-12 21:20
2005.10.09
подскажите пожалуста как заставить WebBrowser1


4-1123600876
CTPAX.RU
2005-08-09 19:21
2005.10.09
Ошибка при чтении и записи в порт


1-1127210855
Суслик
2005-09-20 14:07
2005.10.09
Необъяснимое поведение TEdit.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский