C++ DLL调试

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

我有一个用 C++ 编写的 DLL。它包装了一个静态库。我用 ctypes 从 python 调用它。到目前为止,一切都很好。我需要调试 DLL 中的一些调用。我可以在静态库中设置断点,但不能在 DLL 中设置。我通过使用“调试”菜单中的“附加到进程”来执行此操作。代码看起来像这样:

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

我正在生成调试信息。 pdb 紧挨着 DLL。我正在加载 DLLI 认为我正在加载。我错过了什么?

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

最佳答案

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

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

关于C++ DLL调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13146039/

相关文章:

c++ - Poco SSLManager 和 SecureStreamSocket 可以支持 SSL/TLS PSK(预共享 key 密码套件)吗?

c++ - Fd 大于 1024 时 Select 和 FD_SET 的行为

c++ - 将 shared_ptr 作为参数传递给接受类类型对象的函数

c++ - 有人可以确认这是否是单例的线程安全实现吗

iphone - 仪器和泄漏

c - 使用 dbx 转储结构

c++ - 在 MFC CLR 项目上调试断言错误

php - 2 Unresolved external 因素

c# - 如何在安装新版本期间强制部署项目更新文件?

c# - 解释这个 C# 代码 : byte* p = (byte*) (void*) Scan0;