Thursday, March 31, 2011

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?

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

    MainID : @ck..: in "debug" mode
  • maybe the compiled version differes from the source in vs ...

    MainID : @dittodhole..:What does it means?I use VS2005 to compile&debug my source
    Andreas Niedermair : try to have a look at jpoh's answer - it's basically what i meant
  • 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.

    Steve Rowe : 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.
    Andreas Niedermair : if the sourcecode isn't identical to the source it won't break (i have noticed this behaviour on my own)
  • 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.

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

  • 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)
    MainID : @Steve:There is no *.pdb in the Debug directory.
    Steve Rowe : That's the root of your problem then. It was probably generated somewhere. Go find that and put it in the right place.
  • 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.

  • 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();
    
    MainID : But I am debugging a C++ program , does it help?
    scurial : 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
  • 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.

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

0 comments:

Post a Comment