The "Auto" feature in the Visual Studio debugger guesses (based on the EXE used to launch the process) whether your app is managed or not. Based on this, it decides whether to turn on either managed or native debugging, as appropriate.

If your C# (or other managed language) EXE uses native C++ DLLs, *AND* if you want to be able to debug your native code, it's a good idea to explicitly set the debugger to use "mixed" mode beforehand. Ditto for the inverse scenario.

I've lost a lot of time wondering why my breakpoints weren't firing, or why I couldn't step into certain functions, only to find out that the debugger hadn't inferred the mixed native/managed nature of my program. I wouldn't call this a bug. Rather, it's a difficult problem to solve 100% without knowing the user's true intent.