首页
社区
课程
招聘
[求助]简单问题 - 如何调试DLL
发表于: 2008-12-27 22:04 6980

[求助]简单问题 - 如何调试DLL

2008-12-27 22:04
6980
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
        if(ul_reason_for_call == DLL_PROCESS_ATTACH)
                CreateThread(NULL, 0, ThreadMain, NULL, 0, NULL);
        return true;
}

目的, 我要在 CreateThread(NULL, 0, ThreadMain, NULL, 0, NULL); 这里下个断点;

能不能做到, 请给出具体步骤, 环境是VS2008

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己再弄了一下, 新建一个win32程序, 这个程序只是简单地LoadLibrary这个DLL, 可以停在CreateThread这里了;  但是创建这个线程后(这个线程的代码在DLL中), 想切换到这个线程进行源码调试, 调试器就显示"没有为任何调用堆栈框架加载任何符号", 只能显示反汇编代码, 又如何解决呢....
2008-12-27 23:21
0
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
解决了, 乱撞中的;

新建一个用于辅助调试的EXE程序, 这个程序只是简单地LoadLibrary, 在这个LoadLibrary下个断点;  这个程序的工程项目可以保存在任何地方, 无需和DLL的工程项目在同一地方;

打开DLL工程, 指定用这个EXE程序来辅助调试DLL, 启动调试, EXE程序将停在LoadLibrary, 并且可以看到EXE程序的源码, F10步进, 如果DLLMain函数里有断点, 将停在这里, F10步进直到DLLMain函数返回;

以我的上面的例子来说, DllMain里创建了线程, 返回后在调试器的线程窗口里把主线程(即EXE程序的主线程冻结掉),然后切换到DLL文件创建的这个线程,调试器就会显示"没有为任何调用堆栈框架加载任何符号",因为当时还在ntdll里, 这时继续执行就会返回到DLL里了... 就可以对DLL进行源码的调试了;

exe程序文件和DLL文件都要在原来的debug目录里,不然调试器会找不到它们的符号文件和源代码文件;

好像很方便的样子,只要EXE程序里指定LoadLibrary这个DLL就行了; DLL工程里只需指定这个EXE程序用来调试即可
2008-12-28 00:10
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
OD啊 bp CreateThread
2008-12-28 06:11
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
CPU 窗口   注释 点一下就是源码了
2008-12-28 06:12
0
游客
登录 | 注册 方可回帖
返回
//