代码之家  ›  专栏  ›  技术社区  ›  Jake Pearson

本机C/C++调试

  •  2
  • Jake Pearson  · 技术社区  · 15 年前

    我有一个本地C dll,它调用“loadlibrary”来加载另一个打开了/clr标志的dll。然后,我使用“getprocaddress”获取一个函数并在动态加载的dll上调用它。我想单步进入调试器中的动态库,但符号永远不会加载。知道吗?

    我应该说我在使用Visual Studio 2008。

    更新:由于下面的一些提示,我将项目调试改为混合调试。它不起作用,但我想我知道为什么。我正在开发一个现有应用程序的外接程序。我要连接的应用程序先启动一个exe,然后启动另一个。所以我必须使用“附加到进程”来启动调试器。我猜启动调试器的方式将默认为“自动”。 是否有方法更改vs的默认行为以使用“混合”调试?

    4 回复  |  直到 15 年前
        1
  •  4
  •   Joe    15 年前

    这是从VS2008,但如果我记得正确的话,VS2005是相似的。在本机项目的属性中,在“配置属性->调试”下有一个“调试器类型”,默认设置为“自动”。您需要将其更改为“混合”,因为VS不够智能,无法意识到您需要托管调试。

        2
  •  1
  •   plinth    15 年前

    我在VisualStudio中做过类似的事情,经验丰富。您可以考虑使用procmon查看VisualStudio在何处查找PDB文件。或者,您可以尝试使用windbg。它似乎在加载符号方面做得更好,如果没有,您可以自己显式地加载它们。使用windbg需要经历一个陡峭的学习曲线,但如果你现在在浪费时间,这难道不值得吗?

    您还可以自己运行该exe,并从托管dll的源附加到进程以调试它。

        3
  •  1
  •   Marsh Ray    15 年前

    修改混合模式dll以抛出一个clr异常,在该异常中,它将输入您对调试感兴趣的第一个代码。这将给您一个启动托管调试器的机会。

        4
  •  1
  •   Marsh Ray    15 年前

    在VS2005中,每个项目都有单独启用本机和CLR调试器的选项。可能需要为启动调试器的本机dll项目启用CLR调试器。