views:

1305

answers:

9
+2  Q: 

Why can't I debug?

When I was about to debug C++ program in VS2005,the program didn't stop at the breakpoints.

The VS said"No symbols are loaded for any call stack frame. The source code cannot be displayed".

What can I do?

+1  A: 

Are you running the application in "debug" mode, not "release" mode?

ck
@ck..: in "debug" mode
MainID
A: 

maybe the compiled version differes from the source in vs ...

Andreas Niedermair
MainID
try to have a look at jpoh's answer - it's basically what i meant
Andreas Niedermair
A: 

It sounds like you're attaching to a process rather than running a conventional debug session? If you are indeed attaching to a process, it is important to ensure that binaries that you are trying to debug were built with the same source code currently open in your IDE.

jpoh
Wrong source code should still break, just at strange places in the source. If there is no break, it's probably a symbol issue, not a source code issue.
Steve Rowe
if the sourcecode isn't identical to the source it won't break (i have noticed this behaviour on my own)
Andreas Niedermair
+1  A: 

For whatever reason you don't have the right symbols (.pdb files) in the symbol path. This could be for several reasons:

1) Your binary was compiled more recently than the .pdb files. Try recompiling everything.

2) You are trying to debug a .dll and forgot to copy the .pdb files. Copy those files too.

It's also possible that your code isn't being executed like you think.

Steve Rowe
A: 

Complete clean and rebuild, making sure .pdb's get created?

annakata
+1  A: 

A few steps to try:

  1. Debug->Step Into (this will ensure you stop right after you start)
  2. Debug->Windows->Modules
  3. Look for your foo.exe on the list.
  4. Check Symbol Status. Does it say it is loaded?
  5. If not, go to the path and ensure that: a) there is a file called foo.pdb there b) the timestamp on foo.pdb matches foo.exe (or is really close)
Steve Rowe
@Steve:There is no *.pdb in the Debug directory.
MainID
That's the root of your problem then. It was probably generated somewhere. Go find that and put it in the right place.
Steve Rowe
A: 

I have tried once more.

And the IDE said:"Debugging information for *.exe cannot be found or does not match.Binary was not built with debug information."

I cannot find a *.pdb file in the project directory either.

Frustrated.

MainID
A: 

I've experienced this problem (using c# in VS) when trying to debug my unit tests.

You can add the following code that will launch a new instance of the debugger that will allow you yo step through your code like normal:

System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
scurial
But I am debugging a C++ program , does it help?
MainID
Yes, you can use this with C++. Here's the documentation on the MSDN:http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx
scurial
+5  A: 

Thanks to everybody.

Finally,I found a solution here.

To enable debugging:

1) Goto Project->HelloWorld Properties

2) On the left expand "Configuration Properties"

3) Expand "C/C++"

4) On the left, Select "General"

5) On the right, change "Debug Information Format" to "Program Database For Edit And Continue (/ZI)"

5) On the left, Select "Optimization"

6) On the right, change "Optimization" to "Disabled (/Od)"

7) On the left, expand "Linker"

8) On the left, select "Debugging"

9) On the right, change "Generate Debug Info" to "Yes"

10) Click ok

11) Set your breakpoints

12) Rebuild your application

Also when running your application use Ctrl+F5 to build and run it, this keeps the console window open long enough for you to see your output.

MainID
You might want to put them in the post here in case that link ever moves.
Steve Rowe