|Important||This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.|
How to: Step Into Just My Code
This topic applies to:
Pro and Team
Does not apply
Command or commands hidden by default.
Sometimes, while you are debugging, you might want to look at only the code you have written and ignore other code, such as system calls. You can do this with Just My Code debugging. Just My Code hides non-user code so that it does not appear in the debugger windows. When you step, the debugger steps through any non-user code but does not stop in it.
To distinguish user code ("My Code") from non-user code, Just My Code looks at three things: DBG Files, PDB files, and optimization.
In a standard Debug build, optimization is turned off and debug symbols are created for all modules. When I run a debug build, those modules are considered to be My Code. If I call a library function that is optimized and does not have debug symbols, however, it is not My Code. Just My Code prevents execution from stopping at breakpoints in the library code, which is usually not code I am interested in debugging. In the Breakpoints window, those breakpoints will appear with the Disabled Breakpoint icon.
To see all code and stop at all breakpoints, I can turn Just My Code debugging off by using the Options dialog box.
Three attributes also affect what the debugger considers to be My Code: DebuggerNonUserCodeAttribute tells the debugger that the code it is applied to is not My Code. DebuggerHiddenAttribute hides the code from the debugger, even if Just My Code is turned off. DebuggerStepThroughAttribute tells the debugger to step through the code it is applied to, rather than step into the code.
When Just My Code is enabled, it is possible to choose Break on the Debug menu and stop execution at a location where there is no My Code to display. When that happens, no code is displayed. Additionally, if you choose a Step command, it will take you to the next line of My Code.
Programmatic break statements, such as Visual Basic Stop statements, are handled differently. The debugger always breaks on these statements, even when Just My Code is enabled. In this situation, non-user code is displayed rather than hidden, but stepping will still take you out of non-user code to the next line of My Code.
Just My Code is not supported for device projects.
To enable or disable Just My Code debugging
On the Tools menu, choose Options.
In the Options dialog box, open the Debugging node and then choose General.
Select or clear Enable Just My Code.