- 1
- 2
if (dbg)
printf("2\n");
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+133
if (dbg)
printf("2\n");
// This is debug mode
bormand 22.01.2015 12:39 # 0
Soul_re@ver 22.01.2015 13:43 # 0
laMer007 22.01.2015 13:47 # 0
Soul_re@ver 22.01.2015 13:53 # 0
bormand 22.01.2015 14:51 # 0
guest 23.01.2015 12:47 # 0
Abbath 22.01.2015 15:13 # 0
bormand 22.01.2015 15:54 # 0
kipar 22.01.2015 14:50 # 0
Правда первый пост оправдан если dbg устанавливается в 1 при конкретных условиях, от номера команды или чего-то такого зависит.
wvxvw 22.01.2015 17:09 # 0
1024-- 22.01.2015 19:19 # +1
* С printf не надо приводить отладчик в какое-то специальное состояние и жать все эти br, c, n. Просто запускаем программу, и она всё сама расскажет о себе.
* Окно отладчика эквивалентно окну редактирования кода. Для программиста не создаётся лишний контекст. Только код, вывод компилятора и вывод программы.
* Не надо рыться в стеке. Состояние именуется программистом. Простое и понятное "state 6" из printf("state 6 x=%d y=%d z=%a", x, y, z); вместо "3 уровень стека при входе в функцию trololo на строке 100500 файла foo.gif.cpp".
* printf универсальный. Неважно, что за отладчик используется (из эклипса/вебкитовских веб-инструментов или гдб) и есть ли он вообще, а консоль скорее всего найдётся.
bormand 22.01.2015 19:29 # +1
lorc 22.01.2015 19:40 # 0
wvxvw 22.01.2015 19:54 # 0
Второй пункт - не понял о чем это. У меня все все равно в одном окне.
Мне удобнее "рыться" чем придумывать как что-то там распечатать. Особенно с объектами, которые не особенно распечатаешь (указатели, рекурсивные структуры, просто большие структуры).
По указаной выше причине printf не универсальный. А если идти по пути отказа от полезных инструментов, то можно отказаться и от консоли. Веб-"програмисты" часто без нее обходятся, и ничего.
Единственное оправдание не использованию отладчика - это как Дейкстра когда-то сказал, что отладчик снимает ответственность, и что програмист начинает полагаться не на личное понимание своего кода, а на случайную интерпретацию его компьютером. На этом фоне printf ничем не лучше, просто ухудшеная версия отладчика.
1024-- 23.01.2015 11:39 # +1
По-моему, сложность инструмента должна соответствовать сложности задачи. Да и ситуации разные бывают.
Тупые баги и сиюминутный контроль - printf("2\n"); (в туалет лучше идти пешком)
Чуть посложнее - printf("state15 x=%d\n", x); (в соседний район лучше ехать на метро)
Ещё сложнее - пишем в лог больше и раскуриваем свитки с результатами (за город - на автомобиле)
Творится какой-то бред, действия программы понять невозможно - настало время для отладки отладчиком (в соседнюю страну - на самолёте)
> Веб-"програмисты" часто без нее обходятся, и ничего.
Жаль. Там же консоль даже полезнее отладчика хотя бы из-за того, что показывает иерархию для давно умершего объекта рядом с объектом живым.
bormand 23.01.2015 11:47 # +1
Серверный софт очень удобно отлаживать. Особенно если таймауты в районе 5-10 секунд.
kipar 23.01.2015 15:28 # 0
А если надо отлаживать сам ком-порт, то и printf не сделаешь, только светодиодами моргать.
Soul_re@ver 23.01.2015 15:39 # 0
Qwertiy 23.01.2015 22:13 # 0
Вот это новости о_О
bormand 23.01.2015 22:14 # 0
roman-kashitsyn 22.01.2015 20:57 # +1
Валгринд, санитайзеры, логгирование - наше всё.
bormand 22.01.2015 21:05 # 0
lorc 22.01.2015 21:55 # 0
bormand 22.01.2015 22:01 # 0
lorc 22.01.2015 23:02 # 0
Тут скорее статический анализ нужен.
roman-kashitsyn 22.01.2015 23:39 # 0
bormand 23.01.2015 00:00 # 0
roman-kashitsyn 23.01.2015 11:56 # 0
bormand 23.01.2015 12:55 # +3
Упрлс...
roman-kashitsyn 23.01.2015 15:34 # 0
bormand 23.01.2015 13:00 # +2
Как-то так хотелось:
bormand 23.01.2015 13:08 # 0
bormand 23.01.2015 13:21 # 0
wvxvw 22.01.2015 22:11 # 0
bormand 22.01.2015 22:17 # 0
wvxvw 22.01.2015 22:35 # 0
Designed according to the principles of abstract interpretation very roughly sketched
above, the ASTRÉE analyzer (www.astree.ens.fr/) [6,7,24,25,26,30,31,42,43,44,45,
46,48,49,53,54,55] can formally verify the absence of runtime errors in C programs with
Boolean, integer and floating point computations; structures and arrays; pointers (in-
cluding on functions); conditionals, loops and function calls; limited branching (forward
goto, break, continue), pointer arithmetics and unions without dynamic memory alloca-
tion, recursive function calls, unstructured backward branching, conflicting side effects
(the ASTRÉE analyzer checks the absence of ambiguous side effects since otherwise the
semantics of the C program would not be well-defined), C libraries and system calls (but
for the synchronization on a clock tick or the use of stubs).
Ах, блин without.
3.14159265 22.01.2015 17:21 # +1
r
bt
codemonkey 22.01.2015 17:25 # 0
lorc 22.01.2015 18:29 # 0
3.14159265 23.01.2015 15:54 # +8
Я просто оставлю это здесь, тут описана вся суть С++, и санитайзеры, и UB и стрельба себе в ногу.
Я рассматривал ружье, принесенное Паулой. Оно было совершенно неизвестной мне испанской марки, но как будто в удовлетворительном состоянии. Я обнаружил в нем только один фатальный недостаток.
— Смотри, Рафаэль, — сказал я, — у этого ружья нет предохранителя.
Рафаэль подошел и внимательно осмотрел ружье.
— Нет, Джерри, все в порядке, вот предохранитель.
— Как, этот маленький рычажок?
— Ну да, это и есть предохранитель.
— Нет, не может быть, я переставлял его в оба положения, а курок все равно действует.
— Нет, нет, Джерри… щелчок слышен, это правда, но выстрела не произойдет.
Я с сомнением посмотрел на Рафаэля.
— Во всяком случае, это кажется мне очень странным. Предохранитель есть предохранитель, и когда он установлен, спусковой крючок не может приводить в движение курок.
— Нет, Джерри, ты не понимаешь… это испанское ружье… сейчас я покажу, как оно действует.
Он зарядил ружье, опустил рычажок вниз, выставил дуло в окно и нажал спусковой крючок. Раздался оглушительный грохот, на который отозвались все собаки в поселке, а из двери спальни выскочила Джеки, решив, что куфия вырвалась из ящика. Рафаэль поправил очки и внимательно осмотрел ружье.
— Хорошо, — сказал он с философским спокойствием, — значит, предохранитель действует в таком положении.
Он поднял рычажок, перезарядил ружье, направил ствол в окно и снова нажал крючок. И на этот раз ружье с грохотом выстрелило, а собаки залились истерическим лаем.
— Это так называемое испанское ружье, — объяснил я Джеки, — из него можно застрелиться независимо от того, поставлено оно на предохранитель или нет.
— Нет, Джерри, это очень хорошее ружье, — возмутился Рафаэль, — просто оно сломано внутри.
— Да, оно действительно «сломано внутри», — согласился я.
laMer007 23.01.2015 21:06 # 0
3.14159265 23.01.2015 21:09 # 0