C ++ DLL调试

时间:2012-10-30 19:09:11

标签: c++ debugging visual-studio-2008 dll

我有一个用C ++编写的DLL。它包装了一个静态库。我用python用ctypes调用它。到现在为止还挺好。我需要调试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?

1 个答案:

答案 0 :(得分:2)

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

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