<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Хоть убейте меня &#8211; не понимаю!</title>
	<atom:link href="http://blog.not-a-kernel-guy.com/2008/01/24/282/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.not-a-kernel-guy.com/2008/01/24/282</link>
	<description>... in the Windows kernel team</description>
	<pubDate>Thu, 04 Dec 2008 07:07:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11208</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Sun, 03 Feb 2008 02:32:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11208</guid>
		<description>Такое должно даваться на "Design Patterns" курсах. :-)</description>
		<content:encoded><![CDATA[<p>Такое должно даваться на &#8220;Design Patterns&#8221; курсах. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alexandroid</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11204</link>
		<dc:creator>alexandroid</dc:creator>
		<pubDate>Sat, 02 Feb 2008 22:03:59 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11204</guid>
		<description>Другая песня -- когда логирование проходит через код ошибки, который является индексом массива строк-сообщений, который является глобальной константой и лежит чёрт-знает где (в файле ресурсов, например). При вычитке лога (если не используются __FILE__/__LINE__) очень весело искать последовательно всю эту цепочку, чтобы найти то самое место, где произошла ошибка...</description>
		<content:encoded><![CDATA[<p>Другая песня &#8212; когда логирование проходит через код ошибки, который является индексом массива строк-сообщений, который является глобальной константой и лежит чёрт-знает где (в файле ресурсов, например). При вычитке лога (если не используются __FILE__/__LINE__) очень весело искать последовательно всю эту цепочку, чтобы найти то самое место, где произошла ошибка&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: alexandroid</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11203</link>
		<dc:creator>alexandroid</dc:creator>
		<pubDate>Sat, 02 Feb 2008 22:01:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11203</guid>
		<description>Потому что нигде этому не учат, надо понимать.

Сколько раз встречалось в коде что-то вроде: if (a != expectedA) logErrorAndThrow( "Wrong a!" ). И очень редко что-то вроде "Wrong a! Expected: " &#60;&#60; expectedA &#60;&#60; ", but received " &#60;&#60; a &#60;&#60; ".".

Или вот классы ексепшнов обычно пишут как принимающие строку what сразу на вход, поэтому люди леняться создавать ostringstream и аккуратно в него все логировать перед каждым throw, а пишут просто throw SomeException("Wrong A"). И оправдания вобщем-то логичные -- полное логирование in place засорит код, плюс если исключение словится и обработается, то все конструирование потока с логом будет лишним потреблением ресурсов...

А по-хорошему надо всего-то не полениться и нарисовать подкласс "throw WrongA( a, expectedA)" и все остальное положить в what(). И читаемость, и оптимальное логирование (особенно если what() вызовется отдельным потоком).

Хоть в одном примере Страуструпа такое есть? Да никогда. =\</description>
		<content:encoded><![CDATA[<p>Потому что нигде этому не учат, надо понимать.</p>
<p>Сколько раз встречалось в коде что-то вроде: if (a != expectedA) logErrorAndThrow( &#8220;Wrong a!&#8221; ). И очень редко что-то вроде &#8220;Wrong a! Expected: &#8221; &lt;&lt; expectedA &lt;&lt; &#8220;, but received &#8221; &lt;&lt; a &lt;&lt; &#8220;.&#8221;.</p>
<p>Или вот классы ексепшнов обычно пишут как принимающие строку what сразу на вход, поэтому люди леняться создавать ostringstream и аккуратно в него все логировать перед каждым throw, а пишут просто throw SomeException(&#8221;Wrong A&#8221;). И оправдания вобщем-то логичные &#8212; полное логирование in place засорит код, плюс если исключение словится и обработается, то все конструирование потока с логом будет лишним потреблением ресурсов&#8230;</p>
<p>А по-хорошему надо всего-то не полениться и нарисовать подкласс &#8220;throw WrongA( a, expectedA)&#8221; и все остальное положить в what(). И читаемость, и оптимальное логирование (особенно если what() вызовется отдельным потоком).</p>
<p>Хоть в одном примере Страуструпа такое есть? Да никогда. =\</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11182</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Thu, 31 Jan 2008 17:49:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11182</guid>
		<description>&lt;blockquote&gt;Но мне кажется, что если чего-то еще не сделали, то просто пока не знают как это сделать.&lt;/blockquote&gt;

Дык сделали. Если пользователю выдается сообщение, что что-то пошло не так, то программа как минимум знает, &lt;em&gt;где&lt;/em&gt; что-то пошло не так.

P.S. Линк потёр. Утомили спаммеры.</description>
		<content:encoded><![CDATA[<blockquote><p>Но мне кажется, что если чего-то еще не сделали, то просто пока не знают как это сделать.</p></blockquote>
<p>Дык сделали. Если пользователю выдается сообщение, что что-то пошло не так, то программа как минимум знает, <em>где</em> что-то пошло не так.</p>
<p>P.S. Линк потёр. Утомили спаммеры.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Костя</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11179</link>
		<dc:creator>Костя</dc:creator>
		<pubDate>Thu, 31 Jan 2008 10:06:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11179</guid>
		<description>Судя по всему, это не так просто.. Я, конечно, делитант. Но мне кажется, что если чего-то еще не сделали, то просто пока не знают как это сделать. :)
Комп и прога, они и есть комп и прога.. Они не достаточно сообразительны, для того, чтобы на каждый чих выдавать, в чем конкретно ошибка.. Особенно, если она не синтаксическая, а сематническая например! :)</description>
		<content:encoded><![CDATA[<p>Судя по всему, это не так просто.. Я, конечно, делитант. Но мне кажется, что если чего-то еще не сделали, то просто пока не знают как это сделать. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Комп и прога, они и есть комп и прога.. Они не достаточно сообразительны, для того, чтобы на каждый чих выдавать, в чем конкретно ошибка.. Особенно, если она не синтаксическая, а сематническая например! <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11137</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Fri, 25 Jan 2008 21:08:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11137</guid>
		<description>В том-то и дело, что строчку лога. Хотя бы сообщение о том, что произошло. Где - это уже будет приятный бонус.</description>
		<content:encoded><![CDATA[<p>В том-то и дело, что строчку лога. Хотя бы сообщение о том, что произошло. Где - это уже будет приятный бонус.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chabster</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11136</link>
		<dc:creator>Chabster</dc:creator>
		<pubDate>Fri, 25 Jan 2008 19:54:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11136</guid>
		<description>Строку в логе (из множества таких-же строк), порожденную конструкцией программы или наоборот, имея в сообщении имя файла, ревизию и &lt;em&gt;номер строки кода&lt;/em&gt;? Это как в том анекдоте "Нужно найти X. Да вот же он, на доске!".</description>
		<content:encoded><![CDATA[<p>Строку в логе (из множества таких-же строк), порожденную конструкцией программы или наоборот, имея в сообщении имя файла, ревизию и <em>номер строки кода</em>? Это как в том анекдоте &#8220;Нужно найти X. Да вот же он, на доске!&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11135</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Fri, 25 Jan 2008 17:41:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11135</guid>
		<description>Это лог некоего долгоиграющего процесса, который может завершиться либо успешно, либо с ошибкой. В лог в любом случае пишется ход процесса – что было сделано, в основном. Большая часть сообщений помечается тегом категории (info, warning, error). В моём случае этот процесс завершается невнятным сообщением «Что-то поломалось». Это практически буквальный перевод. Что именно поломалось – хз. Мне нужно быстро найти что именно поломалось.

Поиск по “Error”, “Fail”, “Failure”, “STATUS_[^S]” и т.д. не показывает ничего конкретного – находится лишь случайный мусор. Более того, сравнение двух логов: «хорошего» и «плохого», тоже ничего не даёт. В «плохом» просто отсутствует здоровенный кусок.</description>
		<content:encoded><![CDATA[<p>Это лог некоего долгоиграющего процесса, который может завершиться либо успешно, либо с ошибкой. В лог в любом случае пишется ход процесса – что было сделано, в основном. Большая часть сообщений помечается тегом категории (info, warning, error). В моём случае этот процесс завершается невнятным сообщением «Что-то поломалось». Это практически буквальный перевод. Что именно поломалось – хз. Мне нужно быстро найти что именно поломалось.</p>
<p>Поиск по “Error”, “Fail”, “Failure”, “STATUS_[^S]” и т.д. не показывает ничего конкретного – находится лишь случайный мусор. Более того, сравнение двух логов: «хорошего» и «плохого», тоже ничего не даёт. В «плохом» просто отсутствует здоровенный кусок.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Chaliy</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11129</link>
		<dc:creator>Mike Chaliy</dc:creator>
		<pubDate>Fri, 25 Jan 2008 10:04:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11129</guid>
		<description>"простым текстовым поиском" - а как вы видите этот процес? Всмыле в логе как то должно сообщаться что сообщение об ОШИБКЕ, а не просто? Или как то-то по другому?</description>
		<content:encoded><![CDATA[<p>&#8220;простым текстовым поиском&#8221; - а как вы видите этот процес? Всмыле в логе как то должно сообщаться что сообщение об ОШИБКЕ, а не просто? Или как то-то по другому?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vladislav Artukov</title>
		<link>http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11126</link>
		<dc:creator>Vladislav Artukov</dc:creator>
		<pubDate>Thu, 24 Jan 2008 23:08:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2008/01/24/282#comment-11126</guid>
		<description>Еще интереснее получается, когда выполняется одно дело, а код пишет related-сообщения в разные журналы. Да еще асинхронно и с временнЫми метками.

В самом простом случае получается нечто вот такое:

Журнал 1

01:01 info started process A
01:02 info started process B
01:03 info stopped process B
01:04 info stopped process A

Журнал  2
01:02 err process B failed

На самом деле, конечно, происходит следующее:
01:01 info started process A
01:02 info started process B
* тут процесс валится
01:02 err process B failed
* получаем сообщение об остановке процесса, действительную причину остановки можно узнать только из журнала 2
01:03 info stopped process B
* получаем сообщение об остановке процесса A, но реальную причину остановки можно узнать, только из информации по остановке процесса B
* да еще нужно знать про зависимость A от B
01:04 info stopped process A

Легко представить, во что превращается отладка, если процессов штук 20 и журналов не меньше. И некоторые из процессов кросс-зависимы.

Медвежуть!</description>
		<content:encoded><![CDATA[<p>Еще интереснее получается, когда выполняется одно дело, а код пишет related-сообщения в разные журналы. Да еще асинхронно и с временнЫми метками.</p>
<p>В самом простом случае получается нечто вот такое:</p>
<p>Журнал 1</p>
<p>01:01 info started process A<br />
01:02 info started process B<br />
01:03 info stopped process B<br />
01:04 info stopped process A</p>
<p>Журнал  2<br />
01:02 err process B failed</p>
<p>На самом деле, конечно, происходит следующее:<br />
01:01 info started process A<br />
01:02 info started process B<br />
* тут процесс валится<br />
01:02 err process B failed<br />
* получаем сообщение об остановке процесса, действительную причину остановки можно узнать только из журнала 2<br />
01:03 info stopped process B<br />
* получаем сообщение об остановке процесса A, но реальную причину остановки можно узнать, только из информации по остановке процесса B<br />
* да еще нужно знать про зависимость A от B<br />
01:04 info stopped process A</p>
<p>Легко представить, во что превращается отладка, если процессов штук 20 и журналов не меньше. И некоторые из процессов кросс-зависимы.</p>
<p>Медвежуть!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
