Max*_*ffe 5 c c# debugging visual-studio-2010
我的项目有几个新的C#模块和一个使用win32系统调用编译的C模块(不是C++).我正在使用PInvoke互操作层从C#调用C代码.C函数被调用.
所有模块都写入单个bin目录和所有写入pdb文件.
在运行,然后在调用C.dll之前在断点处停止时,我看到C模块中的断点被禁用.查看Debug | Windows | Modules列表,即使在执行调用后,我也看不到C.dll模块已加载.
另一个事实:在解决方案|属性|配置属性|配置中显示使用Platform ="Any CPU"的C#模块和使用"Win32"的C模块
为什么不加载模块,为什么不加载它的符号?
谢谢,马克斯
Max*_*ffe 13
我从几个来源巩固了答案.
你在运行调试配置吗?
在解决方案中检查:SolnExplorer |解决方案|属性| ConfigurationProperties | Configuration = Debug
和:SolnExplorer |解决方案|属性| ConfigurationProperties | 配置| ProjectConfig [] =调试 - >注意:尽管断点将与发布配置一起使用,但有时可以优化或重新排列行.
你在生成调试信息吗?在C#项目中:SolnExplorer |项目|属性| ConfigurationProperties |链接器|调试|生成调试信息=是
在C++项目中:SolnExplorer |项目|属性| ConfigurationProperties | C/C++ |调试信息格式=程序数据库(/ Zi)
- >注意:检查命令行参数是值得的.
一切都在重建吗?如果PDB不同步,则调试器可能无法加载符号:
在解决方案中:SolnExplorer |解决方案|属性|配置属性| Build = TRUE(已选中)用于所有项目.
你可以调试非托管代码吗?
在C#项目中:SolnExplorer |项目|属性|调试|启用非托管代码debugging = TRUE(已检查)
在C/C++项目中:SolnExplorer |属性|配置属性|调试|调试器类型=混合
文件是否放在您认为的位置?我使用单个bin\debug目录来收集所有项目DLL和PDB.
在C#项目中:SolnExplorer |项目|属性|构建|输出路径= ..\bin\debug
在C/C++项目中:SolnExplorer |项目|属性| ConfigProp |链接器| OutputFile = ..\bin\debug\$(TargetName )$(TargetExt)
旧文件是否会妨碍?检查bin目录中所有输出文件的时间戳.确保它们是最后一次重建时的结果.
有些人建议吹走所有的bin和obj目录.这可能是值得的,只是为了看到旧文件没有铺设.检查时间和日期标记也应该这样做.
DLL已加载?如果禁用断点,可能是因为尚未加载DLL.选中菜单|调试| Windows |模块.
在模块名称中查找dll.
在相同的模块窗口中,确保从正确的路径加载文件.
如果程序集在多个程序之间共享,则可以从GAC加载.
- >注意:您可以在需要之前预加载C/C++ DLL.使用:IntPtr lpDLL = LoadLibrary(myLibraryName);