能力值:
( LV2,RANK:10 )
|
-
-
2 楼
自己再弄了一下, 新建一个win32程序, 这个程序只是简单地LoadLibrary这个DLL, 可以停在CreateThread这里了; 但是创建这个线程后(这个线程的代码在DLL中), 想切换到这个线程进行源码调试, 调试器就显示"没有为任何调用堆栈框架加载任何符号", 只能显示反汇编代码, 又如何解决呢....
|
能力值:
( 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程序用来调试即可
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
OD啊 bp CreateThread
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
CPU 窗口 注释 点一下就是源码了
|
|
|