views:

381

answers:

3

I have program that has a variable that should never change. However, somehow, it is being changed. Is there a way to have the debugger stop when that particular member variable is modified?

+1  A: 

You can set conditional breakpooint at places where the variable is used.

In Visual Studio set breakpoint by pressing F9 when your cursor at the line where you want to set breakpoint.
Next, right click on the breakpoint and select Condition.
Type your condition like

n != 5

Good luck.

Here's a link from MSDN.

Vadim
+4  A: 

Set a data breakpoint to stop execution whenever some variable changes.

Break on the initialization of your variable, or someplace where your variable is visible - you need to be able get its address in memory. Then, from the menus choose Debug -> New Breakpoint -> New Data Breakpoint. Enter "&var" (with var replaced by the name of your variable.)

This will break into the debugger on the exact line of code that is modifying your variable.

More documentation here:

http://msdn.microsoft.com/en-us/library/350dyxd0.aspx

Charlie Tangora
A: 

If it is being modified through an assignment or other direct update, the data breakpoint will work. However, if it is being modified via some other means - for example a buffer overwrite - I'm not sure if it will tell you exactly when it occurs. Just something to keep in mind.

sean e
Unless I'm seriously mistaken, a data breakpoint is set on the *memory location* and not the identifier. (That's why you have to give an expression that evaluates to an address when you set one.) So it should catch buffer overflows, smashed stack, heap corruption, and all that good stuff.
Charlie Tangora
That sounds right. I guess the issue I'm thinking of is when an identifier name is optimized away and you aren't able to even set the breakpoint.
sean e
Don't worry, it's a hardware feature, seriously.
rama-jka toti