понедельник, 30 ноября 2009 г.

How to stop VC++ stepping into certain files

При отладке приходится сталкиваться с ситуациями вроде следующей:
int x1 = somefunc( a.c_str(), b.c_str(), somefunc2( c.c_str() ) );
При нажатии F11(StepInto) отладчик попадает с функцию c_str для первого аргумента, потом второго и так далее. И только потом в SomeFuct. Visual Studio позволяет в каждом случе войти в жалаемую функцию с помощью контекстного меню, как показано на рисунке:


Однако, не всегда удобно каждый раз пользоваться меню. На этот случай в IDE присутсвует недокументированная возможность задать правило перехода по функциям. Конфигурация NoStepInto хранится в реестре в разделе HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\9.0\NativeDE\StepOver. Там можно создать новые строки, которые описывают выражения, куда "не нужно заходить". Примеры:

Не заходить в функции класса CString:
1         \scope:CString.*\:\:.*=NoStepInto
Не входить в перегруженные операторы:
10        \scope:operator\oper:=NoStepInto
Не заходить в ATL:: кроме функций CComBSTR,
которые не являются операторами:
20        ATL\:\:CComBSTR::\funct:=StepInto
10 ATL\:\:.*=NoStepInto
Не заходить в шаблоны, кроме случаев когда это
шаблонные функции обычного класса:
20        \scope:\funct:=StepInto
10 .*[\<\>].NoStepInto


Дополнительную информацию по этой теме можно найти тут.

вторник, 17 ноября 2009 г.

Visual Studio & UTF8

Знаете ли вы, что компилятор Visual C++ поддерживает сорс файлы в кодировке UTF8? Для пользователя это означает, что можно писать комментарии и строковые констаны на различных языках одновременно.
wstring a=L"grüßen";
wstring b=L"שלום עולם!"; // привет мир!
wstring c=L"中文";
Единственное, что требуется — сохранить cpp-файл в кодировке UTF8 с BOM. Для этого нужно в меню File->Advances Save Options... выбрать Unicode(UTF-8 with signature) - Codepage 65001 в пункте Encoding.



Что интересно, файлы без BOM некорректно определяются компилятором. Комментарий разработчкиков компилятора можно посмотреть тут (внизу).

А что если мы хотим использовать мультибайтовые последовательности? В этом случае тоже все хорошо — Visual Studio поддерживает директиву execution_character_set начиная с Visual Studio 2010. Для VS2008 существует хот-фикс. Для корректной работы достаточно добавить следующий код в каждый файл:
#pragma execution_character_set("utf-8")

четверг, 5 ноября 2009 г.

Ubuntu 9.10 fast review

Обновил Ubuntu, как и советовали, через неделю после выхода. Обновление прошло без проблем, но после перезагрузки оказалось, что не отображается экран входа в систему. Случайно обнаружилось, что окно логина расположилось на ТВ. Не ясно чем телек так привлек, но поведение это не удалось поменять, т.к. настройки такой не обнаружилось — все очень скромно:


Окно микшера сделали симпатичнее, чем было, но посмотрел я туда не из любопытства, а потому что не заработал звук через S/PDIF->HDMI. Пока не ясно как это чинить.


Зачем-то установился Network Manager, который написал, что не может управлять моими сетями. Оно и к лучшему — сеть работала отлично, как и раньше.


Попробовал новый официальный клиент обмена сообщениями Empathy. Аккаунт импортировался из Pidgin без проблем, но сообщения приходили в неправильной кодировке. Разбираться стало лень, поэтому пока остается Pidgin.

Ожидаемо порадовало наличие gcc версии 4.4.1. На этом пока все и закончилось, т.к. остальное работает без замечаний и без заметных нововведений.