The breakpoint will not currently be hit. The source code is different from the original version.

Hi... :)

I'm using Visual Studio 2008 + Window XP.
There are 2 projects in my solution. 1st for main project. 2nd for unit test.

I'm trying to debugging and found that break point doesn't work and and pop up the detail as below:

"The breakpoint will not currently be hit. The source code is different from the original version."

I have checked all the properties and they are all in debug mode. Also already try to clean solution rebuilt, restart VS, restart computer, delete pdb file in debug folder and still doesn't work. In release mode breakpoint works. In debug mode breakpoint doesn't work. It is so weird. :(

What I observe is ...
I have a button and caption is "XXX" and I use this sentense to change the button's name.

m_ctrlDelCom.SetWindowTextA(_T("Delete Component"));

If I change to release mode and rebuilt. The text will change from "XXX" to "Delete Component"
If it is still in debug mode and rebuilt. The text will still remain "XXX".

Who is Participating?

>>>> In release mode breakpoint works. In debug mode breakpoint doesn't work. It is so weird.

That must be a misunderstanding or you mixed up the configurations somehow. In Release mode all breakpoints were ignored. If a program breaks when the active configuration is (the) 'Release configuration', the configuration actually is a Debug configuration, i. e. the Optimization was switched off, the runtime dlls in the Code Generation were debug runtime dlls and the _DEBUG was defined in the Preprocessor macros (Release: NDEBUG).

That hardly could be achieved by accident, so I would assume the statement 'In release mode breakpoint works' should mean, 'In Release mode the statement of the line where I put a breakpoint at, was successfully executed while in Debug mode it doesn't break there'.

>>>> m_ctrlDelCom.SetWindowTextA(_T("Delete Component"));

First, if calling SetWindowTextA explicitly you definitively should *NOT* use the _T macro. The SetWindowTextA takes a const char* (LPCSTR) what would require a call like

m_ctrlDelCom.SetWindowTextA("Delete Component");

By using the _T macro the statement wouldn't compile after switching to MS UNICODE character set.

Where did you call that statement?

It either should be called in OnInitDialog (or OnInitialUpdate in case of a form view), or in a handler function, e. g. when handling a button.

In both cases breakpoints *MUST* apply when putting them immediately after the initial curly opening bracket { of the handler function. If the Studio editor doesn't accept the breakpoint there, one reason for that is that the source you were editing is not the same as the debugger was refering to. To verify that

- Close all documents
- open the file from the project tree by double-clicking on it
- hover with mouse over the label of the file in the edit tab
- check that the filepath is the one you expect
- check whether the statement where you want to set the breakpoint
still is in the file you opened freshly and that setting the breakpoint
still doesn't work.

If still the issue wasn't gone, the function you were trying to set the breakpoint probably is in a dll (and not in main project). Then, it is quite normal that the IDE firstly says that the breakpoint couldn't be applied as at compile time the connection to the dll could be unknown. But, at runtime you should be able to set a breakpoint in your main project where the dll firstly was invoked and *after* that you should be able to set a breakpoint to any function of the dll as it now was known by the debugger.

1st solution : The pop-up detail change from "The breakpoint will not currently be hit. The source code is different from the original version." to "The breakpoint will not currently be hit. No symbols have been loaded for this document."

2nd solution : I don't know how to do it. Please kindly explain.

3rd solution : There is no obj or bin folders.

4th solution : doesn't work.

5th solution : doesn't work.

6th solution : Active(Debug), Active(Win32)

7th solution : What is Web.config? I don't do anything about web apps. I'm using MFC.

My project was UNICODE. That's why I use _T().
But it doesn't compatible to other plug-in. So, I have changed to Multi-byte.

I will summerize what happen.
1.) Debug run normally with UNICODE.
2.) Combine with other pluging has memory leak in strcore. So, I have chaned to Multi-bye. (Debug still run normally)
3.) Add unit test (C++) project. Create 2 classes for test. Change those 2 new classes property from "No Common Language Runtime support" to "Common Language Runtime Support (/Clr). Add reference of unit test to the main project. (Debug problem occures here)

Then Debugging ..... again
m_ctrlDelCom.SetWindowTextA("Delete"); (Debug reach to the point)

By the way, I will try the solution that "itsmeandnobodyelse" suggest. Thanks. :)

0

chang2008Author Commented: 2009-07-08

I have solved the problem.

The problem comes from I mix the native and clr because I have to use unit test. Then it calls regasm instead of regsvr32. (I don't know why.)

1.) So, I use post-build event regsvr32 to call regsvr32 .../Debug/my.dll in debug folder and turn off the register output in linker.
2.) and also I config the normal debug with excluded unit test reference code and config the debug test with included unit test reference code.

>>>> Then it calls regasm instead of regsvr32.
The regasm is to register .NET assemblies while regsvr32 calls entry DllRegisterServer in the dll. If you have a mixed assembly these options were not combinable. But you could call the DllRegisterServer function yourself after loading the dll (what probably was made before you changed to /clr).