3

我有一个用 C++ 编写的 DLL。它包装了一个静态库。我用 ctypes 从 python 调用它。到目前为止,一切都很好。我需要调试 DLL 中的一些调用。我可以在静态库中设置断点,但不能在 DLL 中设置断点。我通过使用 Debug 菜单中的 Attach to Process 来做到这一点。代码看起来像这样:

extern "C"
{
    __declspec(dllexport) 
    void foo()
    {
    int i = 0; // Can't hit breakpoint here
    }
}

我正在生成调试信息。pdb 就在 DLL 旁边。我正在加载 DLLI,我认为我正在加载。我错过了什么?

编辑 我重新创建了项目。问题消失了。也许不同之处在于我从托管 C 项目转到了 MFC DLL?

4

1 回答 1

2

当您使用 MS Visual Studio 附加到正在运行的进程时,请确保您已为“托管代码”和“本机代码”设置了选项。这将确保 MS Visual Studio 调试器支持任何类型的代码(本机或托管代码)中的断点。否则,MS Visual Studio 将使用其“自动”设置,这将导致它仅遵循在其“类型”项目中看到的断点(例如:MFC 项目是本机代码(未管理),因此通常不会调试托管代码部分,而 .Net 项目是托管代码,不会因为“非托管”本机代码中的断点而停下来。)

您可以在附加时设置此选项,方法是选择“选择...”按钮,并将单选按钮从“自动”切换到“调试这些代码类型”。在“调试这些代码类型”下,选中“托管”和“本机”旁边的框。如果您使用 MS Visual Studio 识别的其他类型(如用于 SQL Server 代码的 T-SQL 等),则可以选择更多选项。

于 2012-10-30T21:27:49.537 回答