Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以调试使用自定义加载程序加载的dll?_C++_C_Winapi_Windbg_Visual Studio Debugging - Fatal编程技术网

C++ 是否可以调试使用自定义加载程序加载的dll?

C++ 是否可以调试使用自定义加载程序加载的dll?,c++,c,winapi,windbg,visual-studio-debugging,C++,C,Winapi,Windbg,Visual Studio Debugging,我有自己的LoadLibrary函数(MyLoadLibrary)实现,它成功地加载了dll(foo.dll)-执行重定位和解析符号。但是,我无法调试foo.dll中的代码-visual studio(和windbg)调试器无法识别foo.dll中的断点 我发现调试器可以处理结构,也许我可以为MyLoadLibrary生成这样的调试事件(LOAD\uDLL\uDebug\uInfo),并将此事件发送给调试器 我还找到了这个函数——我可以设置我的dll的基址和映像大小(因为我自己加载了foo.dl

我有自己的LoadLibrary函数(MyLoadLibrary)实现,它成功地加载了dll(foo.dll)-执行重定位和解析符号。但是,我无法调试foo.dll中的代码-visual studio(和windbg)调试器无法识别foo.dll中的断点

我发现调试器可以处理结构,也许我可以为MyLoadLibrary生成这样的调试事件(LOAD\uDLL\uDebug\uInfo),并将此事件发送给调试器

我还找到了这个函数——我可以设置我的dll的基址和映像大小(因为我自己加载了foo.dll),我试着从Debuggee调用它,但没有帮助,我认为这个函数必须从调试器调用


有什么方法可以获得foo.dll的源代码级调试吗?

我找到了类似的解决方案:我使用::执行库加载,并带有特殊标志:DONT\u RESOLVE\u dll\u REFERENCES。此函数完成后,我在进程内存中加载并重新定位了dll映像,之后我以自己的方式手动解析所有dll导入,这种方法还保留了源代码级调试。

@Alxey,请将您的dll.pdb文件放在附近?可能是一种解决方法-使用普通的
加载库
进行调试,然后在完成后切换回您的版本。@Dewfy-是的,我有相应的foo.pdbo。很明显,Microsoft提供了调试功能,并修改了LoadLibrary。这就是为什么@RogerRowland的观点看起来reasonable@RogerRowland-实际上您是对的,但当我加载库时,我会以自己的方式解析符号(与::LoadLibrary不同),所以我需要这种方法