NoStepInto not working in VS.NET ?

476 views
Skip to first unread message

Michal Bacik

unread,
Jan 13, 2003, 5:54:59 AM1/13/03
to
Hi,
I'm slowly moving to .NET version of Visual Studio, porting all my behaviors
from MSVC 6.0.
Anyway, when I edit autoexp.dat file, the [ExecutionControl] section seems
not to work anymore.

I've used this:
[ExecutionControl]
C_str::* = NoStepInto
Anyway debugger always steps into C_str class' methods.

I know this is undocumented, but automatic expansion in the autoexp.dat
works fine on .NET.
Any idea how to prevent debugger stepping into specific functions/classes?
Thanks,
- Michal

Bill Boris [MSFT]

unread,
Jan 13, 2003, 3:55:29 PM1/13/03
to
Its still there, just moved into the registry

"Michal Bacik" <mic...@lonelycatgames.com> wrote in message
news:erc$sIvuCHA.1848@TK2MSFTNGP09...

Bill Boris [MSFT]

unread,
Jan 13, 2003, 3:56:52 PM1/13/03
to
It's been moved to the registry

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.0\NativeDE\StepOver]

"10"=".*CString.*=NoStepInto"

"15"="ATL\\:\\:.*=NoStepInto"

"Michal Bacik" <mic...@lonelycatgames.com> wrote in message
news:erc$sIvuCHA.1848@TK2MSFTNGP09...

Michal Bacik

unread,
Jan 16, 2003, 6:00:30 AM1/16/03
to

Thanks,
could you describe the syntax please, or point to some more information? I
discovered I have to create string keys with arbitrary names, but the syntax
has changed since MSVC 6.
What does those dots in front and back of ".*CString.*" mean? And what about
the asterisks? Also you could post more examples with description of what
they filter out.

Thanks a lot.
- Michal


"Bill Boris [MSFT]" <bbo...@online.microsoft.com> wrote in message
news:e92SDZ0uCHA.2000@TK2MSFTNGP11...

Visual C# Team

unread,
Jan 20, 2003, 5:07:37 PM1/20/03
to
The syntax is based on normal VS regular expressions, as used in the Find
dialog. The strings below look overly complicated because they are the
contents of a REG file, and it needs extra escapes over and above the regex
escapes.

The regex string .*CString.* means zero or more of any char, CString, then
zero or more of any char, i.e. any function name with CString anywhere in
it.

The ATL regex string is ATL\:\:.* - the colons have to be escaped for regex
reasons. The double escaping is required as this example came from a REG
file. This string means ATL, then two colons, then zero or more of any char.

Remember this feature is not officially documented or supported.

Andy
--
This posting is provided "AS IS" with no warranties, and confers no rights


"Michal Bacik" <mic...@lonelycatgames.com> wrote in message

news:#gxFF6UvCHA.2304@TK2MSFTNGP10...

Garner Halloran

unread,
Jan 29, 2003, 11:31:21 AM1/29/03
to
I had over 50 custom NoStepInto lines in my autoexp.dat. I tried adding
them to the registry for .NET, but the same syntax isn't working. We
have a ton of singleton's and we don't like to step into the "Get"
function so an example of what I had in the autoexp.dat is:

RSClockMgr::Get=NoStepInto

My registry entry looks like:

"000"="RSClockMgr::Get.*=NoStepInto"

Doesn't work.

2 other things that didn't work:

"000"="RSClockMgr\\:\\:Get.*=NoStepInto"
"000"=".*RSClockMgr.*=NoStepInto"

Any ideas?

For testing this I would close down .NET, click on the .reg file I
created. I clicked OK to enter it into the registry. I checked to make
sure it put it in there correctly. Then I ran .NET, loaded up my
project, ran it and tried to step into a function.

And the header I'm using for the .reg file is:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.0\NativeDE\StepOver]

Visual C# Team

unread,
Jan 30, 2003, 5:45:19 PM1/30/03
to

There's a little more to the syntax than just what Andy describes. Here's
the comment from the source code:

/*
We read the inclusion/exclusion list from the registry at
PRODUCT_ROOT\NativeDE\StepOver

Each string value in that RegKey should have a decimal number for its name
and a
value in the following format:

RegExp=[No]StepInto

Where RegExp is a regular expression per the standard Visual Studio
regular
expression format, with the following additional escapes:

\cid: A C/C++ identifier
\funct: A C/C++ function name
\scope: A set of class/namespace specifiers for a function (i.e.,
ATL::CFoo::CBar::)
\anything: any string
\oper: a C/C++ operator

Due to an oversight, the items are evaluated in descending numeric
order instead of ascending order: the '20' rule will match before
'10'. The first matching rule is used. If no matching rule is
found, we step into. (i.e., there is an assumed entry of
MAX_INT \anything:=StepInto

examples:
---------

Don't step into members of CString[AWT], etc.:

1 \scope:CString.*\:\:.*=NoStepInto

Don't step into overloaded operators:

10 \scope:operator\oper:=NoStepInto

Don't step into ATL:: except for CComBSTR's non-operator members:

20 ATL\:\:CComBSTR::\funct:=StepInto
10 ATL\:\:.*=NoStepInfo

Don't step into templated things, unless they're merely templated
functions in a non-templated class:

20 \scope:\funct:=StepInto
10 .*[\<\>].*=NoStepInto
*/

-Jay


--
This posting is provided "AS IS" with no warranties, and confers no rights

"Visual C# Team" <csh...@microsoft.com> wrote in message
news:e8Q1MBNwCHA.2532@TK2MSFTNGP10...

Visual C# Team

unread,
Jan 30, 2003, 5:49:23 PM1/30/03
to
Hi Garner,

Here's what you should check:
1. Make the numbers unique for each entry
2. Make sure you have two \\ in .reg files, which makes one \ in regedit.
3. If items are in a namespace, and you used 'using' on that namespace, you
still need the full namespace in the entry:
std::string::string

Try using just a very single simple entry, for a simple function, and add
complexity as you go, until you get what you want.

Also, take a look at my other post from 5 minutes ago with the
"documentation" for this "feature". "thanks".

"jay"

--
This posting is provided "AS IS" with no warranties, and confers no rights

"Garner Halloran" <garner....@redstorm.com> wrote in message
news:O$tXQP7xCHA.616@TK2MSFTNGP11...

Garner Halloran

unread,
Jan 31, 2003, 12:50:46 PM1/31/03
to
Thanks for the info and the other great post with some documentation!

For my example, I got my Get function to work as:

RSClockMgr\\:\\:Get()=NoStepInto

I'm still having trouble excluding specific overloaded operators in my
own classes. Since it's such a pain to test this, I'll see if anyone
can help:

I have a string class with an overloaded operator[]. Here is what I've
tried:

RSString\\:\\:operator[]=NoStepInto
RSString\\:\\:operator\\[\\]=NoStepInto
RSString\\:\\:operator\oper=NoStepInto

All to no avail. And I'm not looking forward to figuring out how to not
step into operator[] on our templated array class :)

Garner Halloran

unread,
Feb 10, 2003, 10:40:54 AM2/10/03
to
In case this helps someone in the future, here is what I did for my
templated array class:

"7"="RSArray\\<.*\\>\\:\\:operator.*=NoStepInto"

That makes it so you don't step into any overloaded operators. If
anyone else has any other classes they want to share, this might be a
good thread to post it to.

Reply all
Reply to author
Forward
0 new messages