0

我想调试一段用 C++ 编写的代码。问题在于 dll 是混合的 - 它同时包含 C++ 和 CLI(托管 C++)。环境是VS 2005。

我的入口点是一个非常简单的可执行项目,用 C++ 编写,它只是启动混合 dll 中的代码。

问题是:

  1. 如果我让两个项目的“调试类型”为自动,我的断点不会被命中。(稍后编辑:这是正常的,因为 Auto 是基于可执行项目的内容)。

  2. 如果我将其设置为“混合”,则断点被命中,但非托管手表为空。例如,我看不到 std::string 的值。但是,我可以看到基本类型,例如 int 和 bool。

4

6 回答 6

2

另外,尝试将调试器设置为混合。这将允许调试托管和非托管代码。

于 2008-12-12T06:17:07.507 回答
1

我可以通过在项目属性(在调试选项卡上)中将调试器类型设置为混合来在 VS2005 中以混合模式进行调试。有时这些事情会在重新启动和干净重建后消失。

如果这不起作用,您尝试在应用程序开始运行后附加到应用程序(调试|附加到进程)。您可以通过按“附加到:”部分旁边中间的“选择”按钮来选择调试模式。

你有来自微软的所有更新吗?可能有一个可以解决您的问题。

一般来说,混合模式调试似乎在 VS2008 中工作得更好。如果可以的话,我建议升级。有一个免费版本,但我认为它在某种程度上是有限的。

于 2009-05-13T22:37:20.087 回答
0

你确定你启用了所有的调试选项?我在尝试浏览 C++ 选项的迷宫时“忘记”某些内容时看到了这种情况。

于 2008-12-02T14:25:56.747 回答
0

我面前没有我的 2005/2008 环境,但是我似乎记得有一个选项需要在项目设置中启用(我相信调试选项卡)才能进行非托管调试。启用此功能后,您应该不会有任何问题。

于 2008-12-02T14:44:05.540 回答
0

您需要告诉 Visual Studio 调试的不仅仅是托管代码。转到工具 | 选项,选择调试 | 一般的。取消选中“仅启用我的代码(仅限托管)”旁边的框。

于 2008-12-02T19:40:06.490 回答
0

LanceSc 的建议确实很有帮助。
转到工具 | 选项,选择调试 | 一般的。
取消选中“仅启用我的代码(仅限托管)”旁边的框
这解决了 VS2008 中的问题。

于 2010-07-21T10:38:35.613 回答