понедельник, 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


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

Комментировать в ВКонтакте