про дебаггеры

Werdna

тут как-то меня за мнение "дебаггерами пользуются только плохие кодеры" минусовали.
В вот вам мнение Торвальдса:
http://lwn.net/2000/0914/a/lt-debugger.php3
I don't like debuggers. Never have, probably never will. I use gdb all the
time, but I tend to use it not as a debugger, but as a disassembler on
steroids that you can program.
None of the arguments for a kernel debugger has touched me in the least.
And trust me, over the years I've heard quite a lot of them. In the end,
they tend to boil down to basically:
- it would be so much easier to do development, and we'd be able to add
new things faster.
And quite frankly, I don't care. I don't think kernel development should
be "easy". I do not condone single-stepping through code to find the bug.
I do not think that extra visibility into the system is necessarily a good
thing.
Apparently, if you follow the arguments, not having a kernel debugger
leads to various maladies:
- you crash when something goes wrong, and you fsck and it takes forever
and you get frustrated.
- people have given up on Linux kernel programming because it's too hard
and too time-consuming
- it takes longer to create new features.
And nobody has explained to me why these are _bad_ things.
To me, it's not a bug, it's a feature. Not only is it documented, but it's
_good_, so it obviously cannot be a bug.
"Takes longer to create new features" - this one in particular is not a
very strong argument for having a debugger. It's not as if lack of
features or new code would be a problem for Linux, or, in fact, for the
software industry as a whole. Quite the reverse. My biggest job is to say
"no" to new features, not trying to find them.
Oh. And sure, when things crash and you fsck and you didn't even get a
clue about what went wrong, you get frustrated. Tough. There are two kinds
of reactions to that: you start being careful, or you start whining about
a kernel debugger.
Quite frankly, I'd rather weed out the people who don't start being
careful early rather than late. That sounds callous, and by God, it _is_
callous. But it's not the kind of "if you can't stand the heat, get out
the the kitchen" kind of remark that some people take it for. No, it's
something much more deeper: I'd rather not work with people who aren't
careful. It's darwinism in software development.
It's a cold, callous argument that says that there are two kinds of
people, and I'd rather not work with the second kind. Live with it.
I'm a bastard. I have absolutely no clue why people can ever think
otherwise. Yet they do. People think I'm a nice guy, and the fact is that
I'm a scheming, conniving bastard who doesn't care for any hurt feelings
or lost hours of work if it just results in what I consider to be a better
system.
And I'm not just saying that. I'm really not a very nice person. I can say
"I don't care" with a straight face, and really mean it.
I happen to believe that not having a kernel debugger forces people to
think about their problem on a different level than with a debugger. I
think that without a debugger, you don't get into that mindset where you
know how it behaves, and then you fix it from there. Without a debugger,
you tend to think about problems another way. You want to understand
things on a different _level_.
It's partly "source vs binary", but it's more than that. It's not that you
have to look at the sources (of course you have to - and any good debugger
will make that _easy_). It's that you have to look at the level _above_
sources. At the meaning of things. Without a debugger, you basically have
to go the next step: understand what the program does. Not just that
particular line.
And quite frankly, for most of the real problems (as opposed to the stupid
bugs - of which there are many, as the latest crap with "truncate" has
shown us) a debugger doesn't much help. And the real problems are what I
worry about. The rest is just details. It will get fixed eventually.
I do realize that others disagree. And I'm not your Mom. You can use a
kernel debugger if you want to, and I won't give you the cold shoulder
because you have "sullied" yourself. But I'm not going to help you use
one, and I wuld frankly prefer people not to use kernel debuggers that
much. So I don't make it part of the standard distribution, and if the
existing debuggers aren't very well known I won't shed a tear over it.
Because I'm a bastard, and proud of it!
Linus

val63

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

agaaaa

Статистика есть? Без неё это мнение ничего не стоит .

Werdna

Статистика есть? Без неё это мнение ничего не стоит .
Статистика чего? Это мнение отдельного человека.

6yrop

"дебаггерами пользуются только плохие кодеры"

You can use a
kernel debugger ... and I won't give you the cold shoulder
because you have "sullied" yourself.
Ты как раз отталкиваешь — запятнал себя дебагером => плохой кодер.

6yrop

I happen to believe that not having a kernel debugger forces people to
think about their problem on a different level than with a debugger. I
think that without a debugger, you don't get into that mindset where you
know how it behaves, and then you fix it from there. Without a debugger,
you tend to think about problems another way. You want to understand
things on a different _level_.
Довольно странное утверждение. Получается единственная причина думать на правильном уровне это отсутствие дебагера. Какие-то неразумные люди получаются.
I
think that without a debugger, you don't get into that mindset where you
know how it behaves, and then you fix it from there.

Ошибка вот тут, посмотреть под дебагом не означает немедленное наложение заплатки по месту. Быдлокодеры так делают, да, но не все же быдлокодеры.

Codcod

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

apl13

Не льсти себе, между тобой и Торвальдсом очень большая разница.
Ну Эйнштейну же тоже сначала не верили.

6yrop

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

ppplva

В переводе на русский, Торвальдс пользуется дебаггером сам, но не хочет чтобы им пользовались другие. Приводит несколько совершенно невнятных причин для этого. Основная - его запарили низкокачественными фичами и он не прочь усложнить жизнь разрабочикам, чтобы до него добрались только те кто способен сделать все правильно сразу.
А вообще "дебаггер не нужен" - типичный пример туннельного зрения. Часто это самый простой способ найти ошибку. Совершенно незаменимый если ты не контролируешь части системы, и никакие изменения твоего кода не позволяют инкрементально приблизиться к источнику проблемы.

Whoman-in-white

Можно еще заставлять писать код в блокноте

fisher555

Можно еще заставлять писать код в блокноте
Вроде на бумаге самое кошерное.

psm-home

На доске ещё можно. Пусть мучаются.

vall

Можно еще заставлять писать код в блокноте
а что, нормальный метод
http://plus.google.com/114658067490332530482/posts/6EzCRLGd...
+Paul McKenney is giving his "Validating Core Parallel Software" talk at #lca2013. He says write the code on paper using pen, fix bugs, and rewrite it on a new piece of paper, keep rewriting until the last two copies are identical.
Если кто не знает это изобретатель RCU

luna89

Кто нибудь использует логирование всех вызовов для отладки? (например http://stackoverflow.com/questions/7050896/logging-all-metho... )
Я когда ищу причину бага, расставляю отладочную печать а потом удаляю ее, это правильно?

Anturag

Очевидно неправильно, удалять отладочную печать не нужно, надо лишь менять уровень log verbosity.

Werdna

Я когда ищу причину бага, расставляю отладочную печать а потом удаляю ее, это правильно?
Я тоже так делаю.
причем завел за правило, делать printf или log_error, а сами функции лепить слева без отступов. потом когда всё отладишь просто в виме пишешь /^pr
и далее на каждый найденный вариант dd/ пока не удальшь всё.
Логгированием в режиме дебага тоже можно, но я не умею в cmake прописывать как делать этот режим дебага. Ну и как-то лень даже смотреть, я только в релизе всегда собираю.

bleyman

> http://lwn.net/2000
> 2000
Сейчас у него мнение поменялось, насколько я знаю. Потому что он стал менее плохим кодером, я подозреваю! Он даже писал что=то про это, но мне влом искать.
Потому что я не знаю, то, как ты например дебагаешь код, меня не особо затрагивает (в отличие от других вещей относящихся к культуре программирования если тебе по приколу тупить полдня над багом который я пофикшу за 15 минут посмотрев в дебаггере на значения всех интересных переменных и поняв какой именно код мне нужно почитать повнимательней — это чисто твоя проблема, живи в своём каменном веке, лол.
Алсо, разговоры про Настоящих Мужчин и дебаггеры меня смешат: я дебагал код в 8051 эмуляторе когда у тебя волосы на яйцах ещё не росли. В основном потому, что довольно тяжело дебагать при помощи отладочной печати когда глючит всё включая отладочную печать. Ну и перезапись флешки довольно геморройный процесс.

Anturag

> http://lwn.net/2000
> 2000
Да конечно поменялось, в 2.6.26 Торвальдс замерджил поддержку kgdb. Замечу, что в 2000-м Торвальдс был ну совсем карикатурным настоящим программистом, которому и система контроля версий не нужна была, вероятно, при желании можно из архивов мэиллистов каких-нибудь аналогичных его цитат надёргать, где он утверждает, что и инструментами SCM только недотёпы пользуются.

Anturag

Paul McKenney is giving his "Validating Core Parallel Software" talk at #lca2013. He says write the code on paper using pen, fix bugs, and rewrite it on a new piece of paper, keep rewriting until the last two copies are identical.
Метод несущественно отличается от работы с системой контроля версий, электричества расходуется меньше, бумаги больше. Нормальный такой метод для человека, рождённого в 1950-х.

Papazyan

а что, нормальный метод
Нормальный метод состоит в том, чтобы написать сразу дофига, а потом поправить несколько багов. Если будешь на бумаге чего-то писать, прослывешь идиотом. Впрочем, под ядро код сильно проще, чем в бизнес задачах, там и правда можно силой мысли попытаться его охватить.

6yrop

Впрочем, под ядро код сильно проще, чем в бизнес задачах
смело :D

doublemother

система контроля версий не нужна была, вероятно, при желании можно из архивов мэиллистов каких-нибудь аналогичных его цитат надёргать, где он утверждает, что и инструментами SCM только недотёпы пользуются.
Судя по его более поздним высказываниям, ты его не совсем правильно понял. В своей достаточно знаменитой git talk он, говоря о истории vcs, сказал, что «В начале был CVS. Он был настолько ужасен, что использовать тупо тарболлы было и то удобнее, чем пользоваться CVS». И таки я не вижу в этом утверждении ничего спорного :)

ppplva

Хорошо что хотя бы дебаггер не глючил!

Ivan8209

В итоге он написал git, который настолько ужасен, что лучше уж использовать CVS.
---
"Для того, чтобы не пройти мимо цели, иногда необходимо пойти ко дну."

vall

"Для того, чтобы не пройти мимо цели, иногда необходимо пойти ко дну."
а для этого Торвальдс написал http://github.com/torvalds/subsurface
Оставить комментарий
Имя или ник:
Комментарий: