VC 没有可以用于当前位置源代码(.net同样适用)

来源:互联网 发布:windows php扩展开发 编辑:程序博客网 时间:2024/06/10 15:18
 VC 2008  :There is no source code available for the current location.

       这个问题纠结了很久,写了个服务,通过MFC工程调用服务中的COM组件函数,结果单步调试时调用函数(比如,单击按钮调用服务中某个函数,按钮对应的函数),函数结尾处“}”,在这一行总是弹出提示框:There is no source code available for the current location.
以为是自己函数的问题,查了好多关于“没有可用于当前位置的源码”的解决方案,都行不通。

       通过连编,将MFC工程和服务工程在运行时连编单步调试(停止服务、编译服务、启动服务、在服务工程中debug->Attach to Process...、在服务和MFC工程中分别设置断点、Debug MFC工程),单步调试,在服务中,被MFC调用的函数的结尾处“}”,出现提示框:There is no source code available for the current location

       在服务中采取网上搜集的解决方案,依然不能解决,看着众多种解决方案,眼花缭乱,看到头晕。

       最后,将断点去掉后,在Debug 我的MFC工程,发现编译、运行通过。函数调用成功。

 

        为了方便以后及网友查找参考,将搜集的关于该问题的解决方案汇总如下:

        1、clean and rebuild, 一般可以解决大部分问题。

        2、Tools | Options | Debugging | Native | Load DLL exports ,勾上,可解决部分问题

        3、针对某个单独文件出现这个问题

              由于一个文件出现问题,你可以删除整个cpp中的内容,只留下几个必要的函数,然后看调试能不能运行到函数中,是否正常,如果还是不正常,一直可以减到只 剩下一个构造函数(看编译中出现的错误)。如果正常,在加一些东西,这时可能可以把原来的内容全部加上都ok的。

              有网友遇到这种情况,编译信息时还有警告:warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss

              将所有的没用被注释了的函数都删了,就OK了

        4、有的情况是,使用了Unsafe模式,但是没有启用Debug的Unsafe的代码调试(开启Enable unmanaged code debugging)

        5、工程中某个模块(标记为“A”)修改为在release模式下编译,但是主程序工程还是在debug模式下编译,结果就导致上述问题。把那个模块A用debug编译一下,然后主程序就可以跟进了。

        6、当从不同程序进入(调用)时,出现这个问题:是因为调试的程序集没有同步导致的,就是没有在修改代码后及时的重新编译。右键点击解决方案(Solution Explorer),点击属性(Properties),常规属性(Common Properties),点击调试源文件(Debug Source Files),看看程序有没有被增加到“不查找这些源文件”(Do not look for these Source files)这个框里,如果有,就将该行内容删除,或者将这个框里的内容全部删除。重新编译程序集,生成新的解决方案。

         7、有的情况是,自己定义的函数名可能和某些库有冲突,改了函数名就好了。在改名前该函数可以调试

         8、要进入一个已经生成好的.dll文件中的一个方法,但是.dll文件是封装好的,所以按F11并不能跟进去...。单步调试行不通,但是,该工程不单步调试的话是可以正常运行的。与我的情况类似。(猫猫也是这样的)

         9、Tools->Options,选择Debugging->General,去掉Enable address-level debugging,去掉Require Source files to exactly match the original version。另外也有,先去掉Require Source files to exactly match the original version,在修改下程序,在该文件设置断点调试下,然后重新选定Require Source files to exactly match the original version,解决问题。

 

        暂时这么多吧,以后遇到,在补充。

        像解决方法6的原因通常是双击了“调用堆栈”窗口或“线程”窗口中没有源代码的模块。可以继续调试,但不能使用源代码窗口设置断点并在此位置执行其他操作。如果需要设置断点,请使用“反汇编”窗口。

         自动显示反汇编   :禁用该对话框并在无源代码可用时自动启动“反汇编”窗口。

         显示反汇编 :   启动“反汇编”窗口,但不禁用此对话框。

        参考:http://msdn2.microsoft.com/zh-cn/library/3sehk0fb(VS.80).aspx
 


原创粉丝点击