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

寻找如何在VS9中调试到导出的dll函数。可能的 得到了一个大型的MFC C++项目。我们的VS版本是2008年。它加载一个常规dll(用于某些可选功能)并从中调用导出的函数。当通过MFC应用程序进行调试并调用导出的函数时,您无法进入dll函数。是否有一种方法可以在dll函数内部进行调试。即使我已经在C++解决方案中包含了DLL项目,它似乎也没有“看到”DLL代码。,c++,debugging,dll,C++,Debugging,Dll,编辑:我们有很多扩展DLL,调试它们的效果很好。这是一个直接的dll,没有mfc,/clr选项集,所以我们可以调用一些托管代码。使用此dll的类,加载它,然后使用GetProcAddress查找指向导出函数的指针。这里有一些例子 typedef void (*FP_OnEditOptions) (); 以原型化功能。 然后 获取进程指针,然后 static void OnEditOptions() {(*m_fpOnEditOptions)();} 叫它 调试时,调用它,点击F11,它调用它

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

typedef void (*FP_OnEditOptions) ();
以原型化功能。 然后

获取进程指针,然后

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

调试时,调用它,点击F11,它调用它,但不介入。 是的,dll有调试选项,当加载模块时,符号从相应的pdb文件加载

Thx


安迪

调试+Windows+模块。在列表中找到DLL并右键单击它。符号加载信息告诉您调试器在哪里查找.pdb文件。一定要把它拿到那里


更新后:在启用/clr的情况下,很可能您实际上正在运行编译为IL并及时编译的代码。就像托管代码一样。您需要将调试器切换到混合模式调试。项目+属性,调试,调试器类型=混合。

查看工具->选项->调试->常规

有几个选择可能会有所帮助-我不确定你到底需要哪一个。两个明显的问题是:

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

您还可以尝试在跳转的函数中放置断点。这将迫使调试器在该代码处停止。

只要确保dll是用调试信息构建的,对吗?您好,是,检查了,符号正在加载。有关详细信息,请参见编辑。也许我说得不够具体。Thx的信息;我不知道如何检查。我不知道,你确实应该在之前提到/clr。这是您正在执行的托管代码吗?只需在要调试的DLL函数上设置一个断点。不,我想不。导出的函数看起来是这样的。extern“C”\u declspec(dllexport)void Direct\u Edit\u Options(){…}该函数不是托管代码(至少我不这么认为),而是调用一些托管函数。FooTools::PaymentAPI::RunOptions屏幕();我曾尝试在dll函数中设置断点,但它并没有就此停止,正如我所说,如果我尝试单步执行此函数,它只会运行它而不进行单步执行。TXX用于查看这个。C++/CLI编译器是强大的,它可以将几乎所有的本地C++代码翻译成IL。不知道如何在这样的环境中启用混合模式调试。尝试项目+属性、调试、调试器类型=混合。或者是本地的。你这个男人。将其设置为混合模式调试工作正常。谢谢,这将使调试过程变得非常简单。:)
static void OnEditOptions()
{(*m_fpOnEditOptions)();}