【问题标题】:how to attach to a process that loads my DLL and debug it如何附加到加载我的 DLL 并调试它的进程
【发布时间】:2013-06-27 12:56:23
【问题描述】:

基本上,我正在开发一个供第三方软件使用的 DLL(一个开放接口)。我想在这个第三方 DLL 加载我的 DLL 后对其进行调试,因为我发现了一个特定的错误,只有当我的 DLL 被这个第三方软件加载时才会发生(我的 DLL 对于接受这个开放接口的所有其他软件都可以正常工作)

我在我的代码 DLL 中设置了 __debugbreak() 并运行第三方软件。一个 Visual Studio 对话框确实跳了出来,询问我是否要调试。但是在我单击“确定”后,Visual Studio 没有进入显示我设置断点的代码行的 Visual Studio 窗口,而是崩溃了。

我发现第三方软件加载了我的 DLL 并在另一个线程中运行它。我怀疑这是第三方软件崩溃的原因,因为有效地 __debugbreak() 在主线程启动的线程中抛出了一个未捕获的执行。

在这种情况下,我该如何调试我的 DLL?

【问题讨论】:

  • 什么是第三方软件?为什么它同时列为cc++?您是否尝试在弹出警告对话框之前将调试器附加到进程?
  • 这是一个内部 odbc 项目,由 c 和 c++ 混合实现。
  • 我尝试在弹出警告对话框之前将调试器附加到进程中,但是VS显示符号无法加载...
  • 什么是第三方软件? “无法加载符号”有什么关系?您是否尝试过printf 调试 - 将一些跟踪信息写入系统上的文本文件并不断刷新,这样您就可以获得加载的进程 ID(等)?

标签: c++ c debugging debugbreak


【解决方案1】:

不幸的是,VS 崩溃了,但您可能会找到解决方法。

最好提前开始调试会话。或者当进程在消息框或其他一些输入上被阻止时,使用“附加到进程”。也更好地使用断点。

使用 __debugbreak() 或强制访问冲突尝试询问 VS 的新实例而不是现有实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    相关资源
    最近更新 更多