我正在使用 Visual Studio 2010 调试主要用 C 编写的应用程序。通常,我可以很好地附加调试器,但是当我链接到用 C++/CLI 编写的库时遇到了一些问题。
如果我用 /clr
编译库标志(我最终将不得不为此做尚未编写的库)然后我失去了调试整个 C 应用程序的所有能力,即使是与库调用无关的部分。我得到了一个带有黄色三角形和感叹号的空圆圈,应该是一个红色的断点圆圈。将鼠标悬停在它上面只会给我一个工具提示,上面写着“断点当前不会被命中。没有可执行代码与此行相关联。可能的原因包括:条件编译或编译器优化。”
然后,如果我链接到没有 /clr
编译的完全相同的库标志,我再次能够调试我的应用程序。
我知道 Visual Studio 不太可能调试用 C++/CLI 编写的库,这没关系。我只想保留调试应用程序其余部分的能力,至少可以看到我调用外部库的结果。
另一个复杂的因素是这个项目不是由 Visual Studio 构建的。它是使用使用 cl
的外部 make 系统编译的。 ,所以我可以自定义任何需要以这种方式发送给编译器的命令。
有谁知道为什么我目前不能按照我想要的方式调试库?关于我怎么做的任何建议?
最佳答案
附加时必须选择调试器的类型。请注意对话框中的“附加到”标签。按 Select 按钮并勾选“Native”以获得对调试 native 代码的支持。还需要在您的任何断点命中之前加载 DLL。如果您不确定是否已完成,请查看 Debug > Windows > Modules 调试器窗口以查看加载的 DLL。一旦调试器看到 DLL 加载并设置断点,断点指示器就会从空心变为实心红色。
否则支持调试 C++/CLI,您可以勾选“托管”和“ native ”复选框。并在任何一种代码中设置断点。唯一不支持的是从托管代码到 native 代码并返回的单步执行。需要模式开关来激活正确的调试引擎,这需要代码命中断点。
并考虑您 native 项目中的调试选项,您可以指定一个 EXE 来启动。这样您就可以简单地按 F5 开始调试并跳过附加麻烦。
关于visual-studio - 使用/clr 编译的 C++-CLI 库调试 C 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10214144/