Re[4]: Счастливой отладки
От: Muxa  
Дата: 30.10.09 09:21
Оценка:
EX>Ну тогда ССЗБ
что такое ССЗБ?
Re[5]: Счастливой отладки
От: Кодт Россия  
Дата: 30.10.09 09:31
Оценка:
Здравствуйте, Muxa, Вы писали:

EX>>Ну тогда ССЗБ

M>что такое ССЗБ?
Сам Себе Злобный Буратино ("Буратино! Ты сам себе враг!" — Алиса, Базилио)
Перекуём баги на фичи!
Re[4]: Счастливой отладки
От: NikeByNike Россия  
Дата: 30.10.09 09:43
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Повторюсь:

ДД>

Просто надо правильными дебаггерами пользоваться
ДД>В ассемблерном представлении честный return и throw std::exception() очень отличаются.

Надо ещё уметь им пользоваться, этим грешат не все.

P.S.
Подумал, что надо было сделать ошибку один раз на миллион вызовов или ещё больше, так было бы не очевидно, что надо что-то искать.
Нужно разобрать угил.
Re[2]: Счастливой отладки
От: Skorodum Россия  
Дата: 30.10.09 09:47
Оценка:
Здравствуйте, robin_of_the_wood, Вы писали:

___>Code review или хотя бы просмотр комитов начальником делает такое почти невозможным


Так вроде как данный заголовочный файл не был включен в дерево исходников (в рассказе сказано, что дома из исходников не собралось). Наверное, обиженный программер подсунул его к системным библиотекам на машине где осуществляется сборка релизов для тестирования.
Re[5]: Счастливой отладки
От: ДимДимыч Украина http://klug.org.ua
Дата: 30.10.09 10:01
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Подумал, что надо было сделать ошибку один раз на миллион вызовов или ещё больше, так было бы не очевидно, что надо что-то искать.


Смотря еще что за программа, где и как выполняется. Автоматизированное тестирование, бывает, успешно выявляет ошибки, возникающие и с меньшей вероятностью.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[5]: Счастливой отладки
От: e-Xecutor Россия  
Дата: 30.10.09 10:03
Оценка: 1 (1) +1
Здравствуйте, cthsq, Вы писали:

C>Здравствуйте, e-Xecutor, Вы писали:



EX>>>>"Не верю!" (с) Станиславский


EX>>И кстати, что такое std::random?

EX>>И в каком артефактном компиляторе есть exceptio.h ?

C>вот веть....

C>посмеялся бы над шуткой, кнопку [ ] нажал, да и ладно.
Ну байкоподобная шутка должна быть правдоподобной,
иначе она не смешная

К вопросу о шутках с дефайнами.
Гораздо страшнее дефайны задаваемые в проекте и/или makefile,
особенно если command line вызова компилятора не показывается.

Если передефайненный return тот же eclipse показывает цветом
дефайна и можно туда перейти (или посмотреть хинт), то
про дефайн из makefile-а он ни сном ни духом.

Я как-то что-то отладочное запихал в головной makefile,
а потом случайно закоммитал (да такой я раздолбай).
Прийдя на работу на следующий день обнаружил коллегу в состоянии
близком к истерике

До кучи:
Коллега завёл в классе поле
Mutex _mutex;


в другом месте был такой код:
[ccode]
MutexGuard guard(mutex);
[/code]

без подчерка (нахрена там вообще подчерк это другой вопрос).
Код компилировался без каких либо предупреждений и ошибок.
Но функция в итоге не была синхронизирована со всеми вытекающими.
Ловили достаточно долго.
В солярисе просто в каком-то из системных хидеров есть структура mutex.
Ну и получилось объявление функции...

А и еще по топику:
В gdb и dbx можно поставить breakpoint на место броска исключения.
Так шта...
Re[6]: Счастливой отладки
От: NikeByNike Россия  
Дата: 30.10.09 10:37
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

NBN>>Подумал, что надо было сделать ошибку один раз на миллион вызовов или ещё больше, так было бы не очевидно, что надо что-то искать.


ДД>Смотря еще что за программа, где и как выполняется. Автоматизированное тестирование, бывает, успешно выявляет ошибки, возникающие и с меньшей вероятностью.


Выявить-то выявит, это не вопрос. Вопрос в том — как бы будешь интерпретировать, допустим, возникающую раз в день ошибку в случайном месте (особенно если не слишком опытен)? Опа — тестирование выявило падение. Проверили — не повторяется.
На следующий день упало в другом месте, проверили — не воспроизводится.

Для большей злобы, естественно, имеет смысл кидать не std::exception, а что-нибудь посистемнее, хотя бы запись в нулевой указатель. А можно и просто-где-нибудь в случайном месте память подгадить, ничего не сообщая.
Нужно разобрать угил.
Re[7]: Счастливой отладки
От: ДимДимыч Украина http://klug.org.ua
Дата: 30.10.09 10:59
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Выявить-то выявит, это не вопрос. Вопрос в том — как бы будешь интерпретировать, допустим, возникающую раз в день ошибку в случайном месте (особенно если не слишком опытен)? Опа — тестирование выявило падение. Проверили — не повторяется.


При падении дамп процесса нужно снимать. Или в крайнем случае хотя бы адрес, по которому спровоцировалось исключение. Не знаю, что за платформа была у байкера (от слова байка, а не байк ), но неужели есть такие, где это невозможно? В молодости на delphi программировал, так там необработанное исключение окно показывало: такое-то исключение по такому-то адресу. Если из-под IDE запускаешь или в системе JIT-дебаггер зарегистрирован, то клацаешь "Debug" — и вот оно тебе то место, откуда исключение. А там вместо xor eax,eax\leave\ret какой-нибудь call __throw. В юниксах еще проще.
Ну а если не слишком опытен — так это не повод называть тривиальную подставу "садистским кодом".
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[8]: Счастливой отладки
От: NikeByNike Россия  
Дата: 30.10.09 11:15
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>При падении дамп процесса нужно снимать. Или в крайнем случае хотя бы адрес, по которому спровоцировалось исключение. Не знаю, что за платформа была у байкера (от слова байка, а не байк ), но неужели есть такие, где это невозможно? В молодости на delphi программировал, так там необработанное исключение окно показывало: такое-то исключение по такому-то адресу. Если из-под IDE запускаешь или в системе JIT-дебаггер зарегистрирован, то клацаешь "Debug" — и вот оно тебе то место, откуда исключение. А там вместо xor eax,eax\leave\ret какой-нибудь call __throw. В юниксах еще проще.

ДД>Ну а если не слишком опытен — так это не повод называть тривиальную подставу "садистским кодом".
Ну вот выдало тебе в дамп что функция:
int GetOne() { return 1; }
попыталась что-то записать по нулевому адресу. Ты на неё смотришь — всё нормально Запускаешь — нормально. Ага, делаешь вывод ты, опять у этой грёбанной висты где-то драйвера лажанули, или это китайская память виновата.

А что скажешь про вариант порчи памяти? Какой дамп тут поможет?
Нужно разобрать угил.
Re[9]: Счастливой отладки
От: ДимДимыч Украина http://klug.org.ua
Дата: 30.10.09 11:45
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Ну вот выдало тебе в дамп что функция:

NBN>int GetOne() { return 1; }
NBN>попыталась что-то записать по нулевому адресу. Ты на неё смотришь — всё нормально Запускаешь — нормально.

Буду смотреть на ее ассемблерное представление. Буду проходить по ней отладчиком пошагово по инструкциям. Для эффективного поиска и справления ошибок нужно переставать верить в чудеса.

NBN>Ага, делаешь вывод ты, опять у этой грёбанной висты где-то драйвера лажанули, или это китайская память виновата.


Ну уж не знаю, насколько надо быть "не слишком опытным", чтобы в возникновении спонтанных исключений в конкретной программе сразу винить драйвера. Я допускаю, конечно, что такая ситуация возможна, но перед тем как ее рассматривать, следует рассмотреть более очевидные причины.

NBN>А что скажешь про вариант порчи памяти? Какой дамп тут поможет?


В смысле, когда ошибки из-за реальных проблем с памятью? Такие ошибки проявляются не на одной конкретной программе, зато на одной конкретной машине.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[3]: Счастливой отладки
От: alzt  
Дата: 30.10.09 11:55
Оценка:
Здравствуйте, Muxa, Вы писали:

___>>Code review или хотя бы просмотр комитов начальником делает такое почти невозможным


M>вот начальнику заняться больше не чем — коммиты (с двумя М, кстати) отслеживать.


Если у начальника дел много — коллеги могли бы этим заниматься.
Очень полезно, люди будут знать кто чем занимается и как что-либо сделать.
Re[10]: Счастливой отладки
От: NikeByNike Россия  
Дата: 30.10.09 11:55
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

NBN>>int GetOne() { return 1; }

NBN>>попыталась что-то записать по нулевому адресу. Ты на неё смотришь — всё нормально Запускаешь — нормально.

ДД>Буду смотреть на ее ассемблерное представление. Буду проходить по ней отладчиком пошагово по инструкциям. Для эффективного поиска и справления ошибок нужно переставать верить в чудеса.

Ну да, это выход, достаточно эффективный. Но перед тем как этим заняться, наверное сначала будешь анализировать код? Я имею в виду, что при возникновении редкой ошибки — не сразу догадаешься, что обычный ретурн может лажать. Я бы в таком случае предположил несколько других проблем.

NBN>>Ага, делаешь вывод ты, опять у этой грёбанной висты где-то драйвера лажанули, или это китайская память виновата.


ДД>Ну уж не знаю, насколько надо быть "не слишком опытным", чтобы в возникновении спонтанных исключений в конкретной программе сразу винить драйвера. Я допускаю, конечно, что такая ситуация возможна, но перед тем как ее рассматривать, следует рассмотреть более очевидные причины.

Спонтанные падения бывают при порче памяти. Так же были малопонятные падения:
1. забыли написать ретурн в одной функции — которая возвращала сложный объект. Варнинга об этом вроде-бы не было. Падало совсем в другой функции по малопонятной причине и только в релизе.
2. падало в случайном месте при выполнении потока занятого проигрыванием звука. На 1 компе из 10. Падало вместе с операционкой (XP) — даже файлы повреждались из-за незафлушенности.
Причина — модуль отвечающий за сетевое взаимодействие — выставлял специальные флажки процессору, чтобы на АМД и Интел вычисления с плавающей точкой вели себя одинаково.

NBN>>А что скажешь про вариант порчи памяти? Какой дамп тут поможет?

ДД>В смысле, когда ошибки из-за реальных проблем с памятью? Такие ошибки проявляются не на одной конкретной программе, зато на одной конкретной машине.
В смысле, что вредитель вместо исключения — пишет чего-нибудь рандомное куда-нибудь в память?
Нужно разобрать угил.
Re[2]: Счастливой отладки
От: ora Россия  
Дата: 30.10.09 11:56
Оценка:
Здравствуйте, Кодт, Вы писали:

К>А кстати: кому-нибудь зачем-нибудь нужна функция редактора "курсор за концом строки"?


Лечится включением "word wrap", у меня в Notepad++ всегда включено, правдв в основном инструменте (PL/SQL Developer) такой штуке вообще нет
Re[4]: Счастливой отладки
От: Vzhyk  
Дата: 30.10.09 12:24
Оценка:
alzt пишет:
>
> M>вот начальнику заняться больше не чем — коммиты (с двумя М, кстати)
> отслеживать.
>
> Если у начальника дел много — коллеги могли бы этим заниматься.
> Очень полезно, люди будут знать кто чем занимается и как что-либо сделать.
Во, но в данном случае еще проще творить ИБД.
Posted via RSDN NNTP Server 2.1 beta
Re[11]: Счастливой отладки
От: ДимДимыч Украина http://klug.org.ua
Дата: 30.10.09 12:29
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Спонтанные падения бывают при порче памяти. Так же были малопонятные падения:

NBN>1. забыли написать ретурн в одной функции — которая возвращала сложный объект. Варнинга об этом вроде-бы не было. Падало совсем в другой функции по малопонятной причине и только в релизе.
NBN>2. падало в случайном месте при выполнении потока занятого проигрыванием звука. На 1 компе из 10. Падало вместе с операционкой (XP) — даже файлы повреждались из-за незафлушенности.
NBN>Причина — модуль отвечающий за сетевое взаимодействие — выставлял специальные флажки процессору, чтобы на АМД и Интел вычисления с плавающей точкой вели себя одинаково.

Занятно.
У нас был случай: спонтанно начинало неправильно работать одно из периферийных устройств. Так как в продукте уровней абстракции много и предыдущие выявленные ошибки были в верхних уровнях, то причину искали в первую очередь в них. А причина выявилась позже, когда все-таки сняли осциллограмму с шины. Оказалось, что в новой, еще необкатанной линейке system-on-chip процессоров после определенного времени работы при определенной температуре (!) I²C-контроллер начинает clock'и передавать с некоторой задержкой. Не настолько малой, чтобы вписываться в тайминги по спецификации, но не настолько большой, чтобы все устройства, кроме одного, перестали принимать данные.

NBN>В смысле, что вредитель вместо исключения — пишет чего-нибудь рандомное куда-нибудь в память?


А, в этом смысле. Да, это более жестоко. Но все же, если это в обычном процессе, то такая порча затронет память только этого процесса — варианты с хардварными причинами и драйверами становятся маловероятными. И вредителю придется позаботится о том, чтобы запись с большой вероятность приходилась на доступную область, потому как запись в недоступную выявится так же быстро, по адресу вызвавшей ее инструкции.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re: Счастливой отладки
От: A13x США  
Дата: 30.10.09 23:10
Оценка:
Здравствуйте, Vain, Вы писали:

V>здесь

V>

V>Однажды мне довелось «подхватывать» проект на C++, оставшийся от одного программиста, уволенного несправедливо (по его личному мнению). Впрочем, проект был почти завершён, и мне оставалось лишь немного дописать интерфейс, провести тестирование, отладку и сдать всё заказчику.
V>...


надо было пользоваться vim-ом
set wrap и вся строка на экране, ничего не "уползет".

Ну и почаще смотреть вывод после отработки препроцессора, a.k.a. gcc -E ...
Re: Счастливой отладки
От: dilmah США  
Дата: 31.10.09 09:09
Оценка: :)
> В конце одного из основных хэдеров проекта, заботливо спрятанная за правый край экрана
> нужным количеством табуляторов

и vi и emacs по дефолту заворачивают строки -- то есть строка видна целиком.
Это ж в какой порнографии он код релактирует??
Re[5]: Счастливой отладки
От: midcyber
Дата: 31.10.09 09:38
Оценка:
Здравствуйте, Muxa, Вы писали:

EX>>Ну тогда ССЗБ :)

M>что такое ССЗБ?
Или, в отношении к прекрасному полу,
Сама Себе Злобная Бабка
Re: Счастливой отладки
От: Went  
Дата: 31.10.09 11:01
Оценка:
Здравствуйте, Vain, Вы писали:
#include <exceptio.h>

У меня не компилит. Где используется такой заголовок?
Re[2]: Счастливой отладки
От: dilmah США  
Дата: 31.10.09 13:33
Оценка:
W>#include <exceptio.h>
W>У меня не компилит. Где используется такой заголовок?

в файловой системе с 8-ю значащими буквами в имени и 3-мя в расширении?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.