有一个很大的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,
安迪
答案 0 :(得分:0)
调试+ Windows +模块。在列表中找到DLL并右键单击它。符号加载信息告诉您调试器查找.pdb文件的位置。确保你在那里。
更新后:很可能在/ clr启用后,您实际上正在运行已编译为IL并且即时编译的代码。就像托管代码一样。您需要将调试器切换到混合模式调试。 Project + Properties,Debugging,Debugger Type = Mixed。
答案 1 :(得分:0)
在工具 - >选项 - >调试 - >常规
下查看有几个选项可能有所帮助 - 我不确定你需要哪一个。明显的两个是:
您也可以尝试在被跳过的函数中放置一个断点。这应该会强制调试器停止在该代码处。