Сообщения

День Программиста

Друзья и коллеги! Сегодня 256-й день года, который традиционно считается Днем Программиста. С чем всех и поздравляю!

Каждый охотник желает знать, где сидит фазан

Эта знакомая с детства фраза – не что иное, как пример мнемонической фразы. Напомню, что мнемоника — это совокупность приемов, имеющих целью облегчить запоминание возможно большего числа сведений, фактов и т.п. путем образования искусственных ассоциаций. Во фразе, которая приведена в заголовке статьи, первая буква каждого слова помогает вспомнить цвет. А сегодня мы поговорим об использовании мнемоники в Visual Studio. В этой среде разработки, как в типичном Windows-приложении, есть два основных способа вызова команд с клавиатуры: горячие клавиши и мнемоника. С горячими клавишами все понятно. В главном меню они высвечиваются справа от текста пункта меню, а для команд панели инструментов высвечиваются во всплывающей подсказке, если установлена соответствующая опция (Tools -> Customize -> Show ScreenTips on toolbars ). Число горячих клавиш ограничено – они назначены только для самых популярных команд. Другой, менее популярный, но более мощный способ быстрого вызова команд, – использ...

Техника быстрой локализации ошибок при отладке

Процесс отладки упрощенно состоит из нескольких этапов. Сперва необходимо добиться повторяемости ошибки. Как правило, это делает тот, кто находит и/или регистрирует баг, но в наиболее сложных ситуациях (когда ошибка возникает нерегулярно или ее зависимость от внешних факторов не очевидна) это приходится делать самим. Далее необходимо локализовать баг в программном коде. Чтобы не читать метры кода, лучше максимально сократить тот диапазон, который в дальнейшем придется изучать, чтобы понять, какой фрагмент кода приводит к ошибке. Затем надо понять причину проблемы и, наконец, исправить . По моему опыту, локализация ошибки – наиболее трудоемкий этап в 95% случаев. Если ошибка стала проявляться сравнительно недавно (то есть, можно указать дату и/или номер билда, когда ошибки точно не было и дату и/или номер билда, когда ошибка точно проявляется), могу предложить простую, но эффективную технику, которой сам успешно пользуюсь. Способ локализации ошибки основан на алгоритме двоичного поис...

Ловкость рук и никакого мошенничества

Заметил, так же, что многие даже и не подозревают, что если Tab позволяет перемещаться по контролам в прямом порядке: слева на права и сверху в низ, то комбинация Shift + Tab перемещает фокус в обратном направлении. Еще комбинация из разряда особо не известных J . Ctrl + C на стандартных окнах сообщений ( MessageBox ) позволяет скопировать в буфер в текстовом виде содержимое этого окна: заголовок окна, сообщение, надписи на кнопках.

Нетрадиционное использование using и IDisposable

Предположим, что у нас есть форма и на ней кнопка, по нажатию на которую выполняется некая долгоиграющая операция. При выполнении длительных операций в главном потоке приложения, как правило, надо изменить курсор мыши на песочные часы и затем восстановить его. Для этого можно воспользоваться подобным кодом: private void button1_Click( object sender, EventArgs e) { Cursor oldCursor = Cursor .Current; try { Cursor .Current = Cursors .WaitCursor; // do something time consuming DoSomethingTimeConsuming(); } finally { Cursor .Current = oldCursor; } } Хочу обратить внимание, что конструкция try finally необходима, что бы в случае необработанного исключения в DoSomethingTimeConsuming все равно восстановить курсор. Однако у данного обработчика есть несколько недостатков: конструкция достаточно объемна необходимость блока try finally не очевидна и поэтому блок можно забыть. данный код приходится дублировать для каждого подобного обработчика. У меня есть небольшой трюк, который выполняет ту...

Установка брейкпоинтов в управляемом коде без исходников

Изображение
Хочу поделиться простой техникой установки точек прерывания (breakpoints) на методах классов, к которым у вас нет исходных кодов. Такой вариант использования брейкпоинтов может понадобиться, если у вас по каким-либо причинам нет исходных текстов компоненты или вас совершенно не интересует исходный код метода, а, скажем, только стек вызова этого метода. Таким образом, данная техника позволяет устанавливать точки прерывания на методах классов NET Framework или третьих фирм. Установка точек прерывания на ключевых методах кода позволяет быстро получить ответ на вопросы типа: почему был вызван некий метод, в какой момент происходит установка свойства, вызывался ли интересующий метод вообще. Такой техникой я обычно пользуюсь, когда нахожусь на стадии локализации проблемы и/или при проверке различных гипотез при отладке. Грамотная установка точек прерывания позволяет быстро узнать стек вызов для интересующего метода, чтобы в итоге понять, откуда у проблемы «ноги растут». Эта техника установки...