Breaking single thread
Is it possible to break a single thread in Visual Studio, while other threads will continue their execution?
I have one background thread that does simple data sendin开发者_JAVA技巧g/receiving, which I would like to happen, while stepping through my code in some other thread.
open the thread view (Debug->Windows->Threads), right-click the thread you want to suspend, select 'Freeze'. Select 'Thaw' to put it back in a running state.
Generally it's impossible, but there are some things that might work for specific scenarios.
Basic solution As mentioned elsewhere, repeating the sequence: Freeze, Resume, (wait), Pause, Thaw, Step should result in the behavior you describe, giving other threads the possibility of running in the background while your target thread is halted.
This approach has at least two issues:
- It's quite tedious
- Your background threads will be suspended anytime the debugger is paused.
Improvements
The first issue may be tackled using a different procedure: Issue a Thread.Sleep(10000)
in the Immediate Window, effectively keeping the focused thread occupied while the other threads execute normally. You could even bind that command to a macro.
The second issue can only be tackled by an approach that does not need to pause the debugger. But how would we examine state when the session isn't paused? That's where IntelliTrace comes in, but you may find you need to create custom IntelliTrace events. Drawback of this approach is that you can not manually modify state mid-flight.
Set a counter that does a one up for each thread created and then set your break point to break on a condition and pick a value for that counter. I don't think this will work in all cases, especially PLINQ, but should be doable in a lot of situations.
All i can find to this, is that you can change the behaviour on a process level by the setting
- Tools - Options - Debugging - General - Break all processes when one process breaks
but not on a Thread base.
You can always put a conditional break point based on a property of your current thread (like the name or id).
You may also find this usefull : http://www.codeproject.com/Tips/396617/Conditional-Breakpoint-using-Make-Object-Id-featur
This worked for me in VS2008 and should work in a similar way in 2010 at the least
精彩评论