Re[48]: Вопрос к Vlad2: Nemerle & R#
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.03.06 00:42
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Или внимательнее читать нужно. А не выдавать собственные мысли за чужие слова.


Куда уж внимательнее. Просто с твоего восприятия офигеть можно. Ты уж извини.
Лучше бы чем разводить пустые споры и распросы взял бы и попробовал сам.

Только будь окуратен. Видишь, многие попробовавшие и оценившие подсаживаются на иглу.

E>Ага, конечно. У тебя, наверное, никогда наведенных ошибок не было.


Бывали. В основном когда писал на С/С++ и скриптах разных. На Шарпе что-то наведенки крайне мало, и она легко отлавливается. С Немерлом пока тоже вроде все понятно в отладке.

E> Когда код проходит все unit-тесты, но в одном из двадцати реальных прогонов почему-то ломается.


Я на скриптах не пишу. Так что техники безопасного секса не так актуальны. Нет у меня обычно юнит-тестов... Обычно все и так неплохо работает.

E>А вставлять в код макроса Assert(false) -- это вариант. Про него я не знал. Только вот насколько он удобен, если макрос раз 50-100 вызывается за время компиляции.


Теперь ты эту фразу будешь повторять 10 раз полностью закрывая глаза на то, что тебе два дня назад сказали, что можно просто поставить точку останова в отладчике.

Право... надоело.

Обясняю последний раз и закроем тему.

Сначла терминалогия. Объектный код — это код компилируемой программы. Именно он содержит обращения к макросам. И именно он после компиляции и раскрытия макросов превращается в исполняемый модуль.

Макросы не вызваются из объектного кода. Они раскрываются в объектном коде заменяясь реальным кодом. Так что после того как код использующий макросы был скомпилирован ловить в нем уже нечего! Если в рантайме поставить точку останова в объектном коде в месте "вызова" макроса, то ты "увидишь" не вызов, а сгенерированный код. А точка останова будет находиться в его начале. "Увидишь" взято в ковычки, так как фактически не предпринимая специльных действий, ты вообще ничего не увидишь. Ведь генерируемый код не виден взору.

Так что идея поставить точку останова на "вызове" макроса — это нелепица вызванная не пониманием приципа действия макросов.

Теперь, что касается отлова нужного места.
1. Место не должно влиять на результат, если макрос написан грамотно. Надо стараться делать так, чтобы разные обращения к макросам с одинаковыми параметрами приодили к одинаковому результату. Побочные эффекты иногда конечно полезны, но нужно четко осознавать их опасность. Это ничем не отличается от создания прикладного кода.
Это позволит отлаживать макросы просто передавая им на вход набор тестовых данных.
2. Для отлова места, если поведение макроса зависит от порядка вызова или того где он исползуется, если это очень нужно можно использовать другой, отладочный, макрос который взведет некую переменную которую можно проверить в основном макросе и отловить точкой останова.
3. Если нужно отловить n-ый вызов макроса, можно поставить точку останова с условием или просто навести отладочную переменную в макросе которая будет увеличиваться при кождом следующем вызове макроса. Остальное дело техники.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.