如何使用QtCreator调试DLL项目?

6

我已经用QtCreator IDE编写了一个非Qt C DLL,并使用mingw进行编译。

当我将DLL注入到进程中时,该DLL会在某一行代码导致该进程崩溃。通过使用OutputDebugString,我发现这一行是罪魁祸首。我知道如何修复此问题,并且在修改该行代码后,DLL可以正常工作。然而,为了学习如何使用调试器,我让这行代码仍然是错误的和未修改的。

我应该如何使用QtCreator调试器来找到相同导致问题的确切代码行?当QtCreator设置为以调试模式进行编译时,按下F5键会弹出以下对话框,因为没有EXE:

enter image description here


1
编写一个链接到库的小程序,以重现问题并在调试器中运行。或者你所说的“注入”是什么意思? - Frank Osterfeld
@FrankOsterfeld:http://en.wikipedia.org/wiki/DLL_injection。这是一个低级别的DLL文件,可以编辑受害进程的内存。由于DLL注入的工作原理,我无法链接到该库。为什么要编辑另一个进程的内存?我正在编辑一个名为Assault Cube的开源项目的内存。其目的是探索并了解C代码如何被转换为ASM以及计算机在低级别上如何工作。 - user2924308
1
你可以在上面的窗口中输入可执行文件名称、使用你的dll和参数,QtCreator会为你完成其余工作。 - Lol4t0
@Lol4t0:哦,那也可以。省了我一点时间。谢谢。 - user2924308
@Lol4t0:实际上,你的方法更好。它让我可以逐步执行代码,而我认为使用Nazar554的方法做不到这一点。 - user2924308
@user2924308,假设您已经打开了要调试的项目,实际上两种方法几乎是相同的。主要区别在于Nazar554的方法将调试器附加到已经运行的应用程序上,而我的方法将为您启动应用程序。有时候附加更方便,有时候启动更方便。无论哪种方式,只要您构建了调试版本,都可以逐步执行代码。 - Lol4t0
1个回答

3

解决方法是在注入DLL之前运行附加到可执行文件的调试器。必须使用调试配置构建DLL并打开其项目。使用这里的指令附加调试器,然后再注入DLL。如果可执行文件崩溃,当您单击所选堆栈帧时,应该可以看到堆栈跟踪和您的DLL代码。但要小心:如果您破坏了进程的内存,则堆栈跟踪可能不完整或不正确。


太棒了!我几乎确定这是不可能的。 - user2924308
如果您觉得我的回答有帮助,请接受它。 - Nazar554

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接