2011年11月20日日曜日

Visual Studio のステップインで特定の関数だけステップインしない方法

会社のPCを引越ししたときに、やり方を忘れてしまったので備忘録として残しておきます。

Visual Studio でデバッグをしているとき、
F11 でステップイン実行していたら、 operator にステップインして

そこはもうわかってるから

ってなことになることはないですか?
ソースがどんどん開かれてウザくないですか?

そんなときに、NoStepInto です。

レジストリエディターで、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\NativeDE\StepOver
※VS2008 の場合。64bit では HKLM\SOFTWARE\Wow6432Node\...
に、文字列を新規で作成します(名前は何でも良い)。そこに、
\scope:operator\oper:=NoStepInto
と記述することで、すべての operator オーバーロードにステップインしないようにできます。


その他の例を以下に書いておきます。
  • CString[A|W|T] のすべての関数、 operator へのステップインをしない。
    \scope:CString.*\:\:.*=NoStepInto
  • CString[A|W|T] のすべての関数へのステップインをしない。
    \scope:CString.*\:\:\funct:=NoStepInto
  • CString[A|W|T] のすべての operator へのステップインをしない。
    \scope:CString.*\oper:=NoStepInto
  • CString[A|W|T] の CompareNoCase だけステップインをしない。
    \scope:CString.*\:\:CompareNoCase=NoStepInto

/scope: はスコープにマッチ。
/funct: は関数にマッチ、
/oper: で operator にマッチするようです。
NoStepInto ではなく StepInto にするとステップインすることになります。

あと、デバッグ実行する度にレジストリが読み込まれるようなので、
レジストリを変更しても Visual Studio を立ち上げ直す必要はありません。
(最初知らずに何度も立ち上げ直してました。)



追記

コード例を追加。
void func(LPCTSTR lpszPath);

int main(int argc, const char* argv[]))
{
    CString strPath = "test";
    func(strPath);   // ここで、 operator LPCTSTR () にステップインしない
    return 0;
}



0 件のコメント:

コメントを投稿