寻找如何在VS 9中调试导出的dll函数。可能吗?

时间:2010-08-26 16:43:19

标签: c++ debugging dll

有一个很大的MFC C ++项目。我们的VS版本是2008.它加载一个常规的dll(用于某些可选功能)并从中调用导出的函数。当通过MFC应用程序进行调试并到达我们调用导出函数的位置时,您无法进入dll函数。有没有办法在dll函数内部进行调试。即使我已经在C ++解决方案中包含了dll项目,它似乎也没有“看到”dll代码。

编辑:我们有很多扩展dll,调试到它们的工作正常。这是一个直接的dll,没有mfc,/ clr选项设置,所以我们可以调用一些托管代码。使用此dll的类,加载它,然后使用GetProcAddress查找指向导出函数的指针。以下是一些例子。

typedef void (*FP_OnEditOptions) ();

对函数进行原型设计。 然后

m_fpOnEditOptions = (FP_OnEditOptions) GetProcAddress(hInstance, "Direct_Edit_Options");

获取proc指针,然后

static void OnEditOptions()
{(*m_fpOnEditOptions)();}

来称呼它。

调试时,转到对它的调用,按F11,然后调用它,但不会介入。 是的,dll有debug选项,当加载模块时,符号从相应的pdb文件加载。

THX,

安迪

2 个答案:

答案 0 :(得分:0)

调试+ Windows +模块。在列表中找到DLL并右键单击它。符号加载信息告诉您调试器查找.pdb文件的位置。确保你在那里。

更新后:很可能在/ clr启用后,您实际上正在运行已编译为IL并且即时编译的代码。就像托管代码一样。您需要将调试器切换到混合模式调试。 Project + Properties,Debugging,Debugger Type = Mixed。

答案 1 :(得分:0)

在工具 - >选项 - >调试 - >常规

下查看

有几个选项可能有所帮助 - 我不确定你需要哪一个。明显的两个是:

  • 禁用“仅我的代码”
  • 禁用“跳过属性和运算符”

您也可以尝试在被跳过的函数中放置一个断点。这应该会强制调试器停止在该代码处。