我有一个用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?
答案 0 :(得分:2)
使用MS Visual Studio附加到正在运行的进程时,请确保为“托管代码”和“本机代码”设置了选项。这将确保MS Visual Studio调试器能够遵守任何类型的本机代码或托管代码中的断点。否则,MS Visual Studio将使用其“自动”设置,这导致它只记录它在项目的“类型”中看到的断点(例如:MFC项目是本机代码(未管理),因此通常不会调试托管代码段,而.Net项目是托管代码,不会在“非托管”本机代码中停止断点。)
您可以在连接时设置此选项,方法是选择“选择...”按钮,然后将单选按钮从“自动”交换为“调试这些代码类型”。在“调试这些代码类型”下,选中“托管”和“本机”旁边的框。如果使用MS Visual Studio可识别的其他类型(如SQL Server代码的T-SQL等),则可以选择更多选项。