VC语言

本类阅读TOP10

·VC++ 学习笔记(二)
·用Visual C++打造IE浏览器(1)
·每个开发人员现在应该下载的十种必备工具
·教你用VC6做QQ对对碰外挂程序
·Netmsg 局域网聊天程序
·Windows消息大全
·VC++下使用ADO编写数据库程序
·VC++学习笔记(四)
·非法探取密码的原理及其防范
·怎样在VC++中访问、修改注册表

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
解决断点不工作

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

最近在一个动态库中调试程序,这个动态库是可执行文件在执行过程中动态加载的,所以在动态库代码中设置断点,启动调试的时候总是会出现一个断点无效的警告,并且断点变成灰色,只有当动态库被加载后才能设置断点

在MSDN中找了半天,终于找到解决方案:

Can't Set Breakpoint in Source File When Corresponding Symbolic Info Isn't Loaded into Memory by Debugger

You cannot set a breakpoint in any source file when the corresponding symbolic information will not be loaded into memory by the debugger. Symptoms include messages such as "the breakpoint cannot be set" or a simple, non-informational beep. When setting breakpoints before the debuggee has been started, the debugger uses a breakpoint list to keep track of how and where to set breakpoints. When you actually begin the debugging session, the debugger loads the symbolic information for all designated debuggees and then walks through its breakpoint list, attempting to set the breakpoints.

However, if one or more of the debuggees have not been designated to the debugger, there will be no symbolic information for the debugger to use when walking through its breakpoint list. Situations where this is likely to occur include:

  • Attempts to set breakpoints in a DLL before the call to LoadLibrary.
  • Setting a breakpoint in an OLE server before the container has started the server.
  • Other similar cases.

NOTE: After you receive notification that these breakpoints cannot be set, the breakpoints will usually continue to show up in the breakpoint list, but they will have a dash (-) to their left, indicating that they are disabled (have not been set).

To prevent this behavior in Visual C++, specify all additional DLLs and OLE servers in the Additional DLLs field in the Options.Debug... dialog box. To prevent this behavior in in CodeView, use the /L command line switch to notify CodeView that you want it to Load symbolic debug information for additional .EXE and .DLL files. When this has been done, breakpoints set in code that has not yet been loaded into memory will be "virtual" breakpoints. When the code is actually loaded into memory by the loader, these become physical breakpoints. Ensure that these additional debuggees are not already running when you start your debugging session. Failure to follow this rule will likely cause breakpoints to be missed.

文档中说解决方案是在设置的Additional DLLs中指定需要加载的DLLs.就这么一句没头没脑的话,让我捉摸半天,最后终于发现在project-settings的debug标签中,给category选择Additional DLLs,哈哈,在下面的Modules中输入需要加载的DLLs的名称,就可以了




相关文章

相关软件