【发布时间】:2013-03-05 21:23:30
【问题描述】:
我真的一直在用头撞到众所周知的墙上。
我有一个同时包含 C# 和 C++ 代码项目的解决方案。
我经常调用 C++ DLL,它们是通过 P/Invoke 从 C# 编译到这个项目中的。没问题。据我所知,通过 *.sln 文件以及 C++ 和 C# 文件进行的所有必需的调试器设置都已正确设置。注意:我经常能够毫无问题地调试类似的 P/Invoked C++ 代码!
当然,我想,也许是符号没有加载——然而,在打开模块窗口时,我发现我试图进入的 DLL 甚至没有列出!在我的 C# 程序中运行该函数确实使用了 DLL(我得到了正确的输出),但是,在查看 Modules 窗口时,DLL 仍然没有出现。
有人知道发生了什么吗?
tl;dr --> 我在调试 P/Invoked C++ 方面有相当多的经验。但是,我希望调试的 DLL 甚至没有出现在模块列表中(所以如果 VS 调试器似乎完全不知道它的存在,我显然无法进入它)。
提前致谢!!
干杯!
-卡达杰
【问题讨论】:
-
我们如何重现您的场景?
-
您是否设置为“混合模式”调试?即没有列出或列出一些本机(即 C++ 模块),只是不是您要调试的那个?
-
David:不幸的是,我无法轻松重现该场景,因为这是我唯一一次在模块列表中缺少 dll! Matt:我准备在 C++ 项目中进行混合模式调试,将 Attach 设置为 Yes。在 C# 项目中,C++ 项目被列为依赖项。同样在 C# 项目中,选中启用非托管代码调试。问题是,当调用代码时,即使在 Debug > Modules 屏幕下,也没有列出任何 C++ dll。你们中的任何一个人以前见过吗?感谢您迄今为止的提示!
-
启动项目设置是最重要的(启动项目是在解决方案资源管理器中加粗的项目)。 that 项目的调试设置是否设置为“启用非托管代码调试”?另一件要尝试的事情是启动进程,并从调试器附加到它,看看你是否得到不同的行为。
-
^这解决了它!非常感谢,马特!我错误地认为只有调用 C++ dll 的 C# 项目才需要此设置。好吧,本身并没有假设,但是我没有想到,在您启发我之后,现在看起来很明显-> 顶级 C# 启动项目(即运行的 *.exe)是什么需要设置此标志。
标签: c# c++ visual-studio-2010 debugging pinvoke