Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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++ WinDbg说“我不知道”;。dll";在图像列表中找不到_C++_Windows_Visual C++_Dll_Windbg - Fatal编程技术网

C++ WinDbg说“我不知道”;。dll";在图像列表中找不到

C++ WinDbg说“我不知道”;。dll";在图像列表中找不到,c++,windows,visual-c++,dll,windbg,C++,Windows,Visual C++,Dll,Windbg,我试图在WinDbg中加载dll,但出现了此错误。这里是细节 使用VisualC++express构建.dll 将A.pdb和A.dll放在d:\test\目录中 将图像路径和符号路径设置为d:\test .sympath gives OK D:\test 尝试使用以下命令加载 .reload /f A.dll 它给 "A.dll" was not found in the image list. Debugger will attempt to loa

我试图在WinDbg中加载dll,但出现了此错误。这里是细节

  • 使用VisualC++express构建.dll

  • 将A.pdb和A.dll放在d:\test\目录中

  • 将图像路径和符号路径设置为d:\test

    .sympath gives 
    OK                 D:\test
    
  • 尝试使用以下命令加载

    .reload /f A.dll
    
    它给

    "A.dll" was not found in the image list.
     Debugger will attempt to load "A.dll" at given base 00000000.
    
    Please provide the full image name, including the extension (i.e. kernel32.dll)
    for more reliable results.Base address and size overrides can be given as
    .reload <image.ext>=<base>,<size>.
    DBGENG:  wined3dwddm.dll - Partial symbol image load missing image info
    DBGHELP: No header for wined3dwddm.dll.  Searching for dbg file
    DBGHELP: d:\test\A.dbg - file not found
    DBGHELP: d:\test\dll\A.dbg - path not found
    DBGHELP: d:\test\symbols\dll\A.dbg - path not found
    DBGHELP: .\A.dbg - file not found
    DBGHELP: .\dll\A.dbg - path not found
    DBGHELP: .\symbols\dll\A.dbg - path not found
    DBGHELP: A.dll missing debug info.  Searching for pdb anyway
    
    DBGHELP: wined3dwddm - private symbols & lines 
            d:\test\A.pdb - unmatched
    Unable to add module at 00000000
    
    “A.dll”未在映像列表中找到。
    调试器将尝试以给定的基数00000000加载“A.dll”。
    请提供完整的映像名,包括扩展名(即kernel32.dll)
    为了获得更可靠的结果,基址和大小覆盖可以如下所示
    .reload=,。
    DBGENG:wined3dwddm.dll-部分符号图像加载缺少图像信息
    DBGHELP:wined3dwddm.dll没有头。搜索dbg文件
    DBGHELP:d:\test\A.dbg-找不到文件
    DBGHELP:d:\test\dll\A.dbg-未找到路径
    DBGHELP:d:\test\symbols\dll\A.dbg-找不到路径
    DBGHELP:。\A.dbg-找不到文件
    DBGHELP:。\dll\A.dbg-找不到路径
    DBGHELP:。\symbols\dll\A.dbg-找不到路径
    DBGHELP:A.dll缺少调试信息。还是在搜索pdb
    DBGHELP:wined3dwddm-专用符号和线条
    d:\test\A.pdb-不匹配
    无法在00000000处添加模块
    
  • 在最后一行“d:\test\A.pdb-unmatched”中,尽管它这样说,但我确信pdb文件是生成已安装DLL的生成结果中的文件

    附加问题

    由于答案表明A.dll可能未加载,下面是一个可能的反例。为此,我需要稍微修改一下这个问题,以反映我遇到的现实

    我有一组DLL(比如A到Z DLL),它们是从开源项目构建的。老实说,我不了解整个项目的全貌,我想通过跟踪函数用WinDbg解决这个问题

    此外,当我在process explorer中找到一个.dll时,它就在那里。 如果我尝试加载一个.dll的符号,就会得到上面的消息。这里有什么我错过的吗

    为什么我认为加载了.dll

  • 我在a.dll中打印一条uniqe消息,例如(“this_是_uniqe_message_from_a.dll”),我可以看到消息正在连续打印

  • 我可以在process explorer中看到一个链接到explorer process的.dll

  • 此外,(我不确定这是否重要),我正在QEMU 1.7.0版上使用Windows8.1

    此问题的原因和解决方案

    原因:原因其实很简单。我想要调试的进程在用户空间中,当我试图列出加载的模块时,我处于内核模式

    解决方案:我需要进入用户空间(到我想要调试的进程),然后,我可以看到模块列表。此外,我还可以设置断点等

    我在MSDN论坛上发布了同样的问题,他们回答了我。看


    您不能强制WinDbg将DLL加载到进程中,进程必须加载它,然后您可以使用WinDbg查看内存中的DLL。

    snoone
    所述,您收到的消息是因为您的进程尚未使用您的DLL。也就是说,它不存在于内存中

    你可以试试这个

    a
    sxe-ld:a.dll
    ——这将确保在内存中加载.dll时中断调试器


    b。在此之后,您加载符号的尝试应该会成功

    如果此问题是关于强制windbg将dll加载到进程中是的,则可以强制windbg将dll加载到进程中,即使进程不想加载它

    0:000> .load sdbgext ; !loaddll f:\masm32\icztutes\tute17\skeleton.dll ; g
    kernel32!LoadLibraryA() will be run when execution is resumed
    
    ModLoad: 10000000 10005000   f:\masm32\icztutes\tute17\skeleton.dll
    kernel32!LoadLibraryA() returned 10000000
    (7a8.aac): Break instruction exception - code 80000003 (first chance)
    eax=00000000 ebx=0030020e ecx=7c91ead5 edx=0034fd7d esi=7c801d7b edi=7c81cb12
    eip=7c90120e esp=0034ff9c ebp=0034fff0 iopl=0         nv up ei pl nz ac pe nc
    cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000216
    ntdll!DbgBreakPoint:
    7c90120e cc              int     3
    0:001> lmDvm sk*
    Browse full module list
    start    end        module name
    10000000 10005000   skeleton   (deferred)             
        Image path: f:\masm32\icztutes\tute17\skeleton.dll
        Image name: skeleton.dll
        Browse all global symbols  functions  data
        Timestamp:        Wed Sep 14 11:13:41 2005 (4327B88D)
        CheckSum:         00000000
        ImageSize:        00005000
        Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
    
    编辑以处理评论

    原始的。
    重新加载输出显示缺少符号信息
    ,尽管您说a.dll有a.pdb
    您未提供真实姓名和真实输出,可能无法推断 从您的描述来看,您的问题是

    让这些工具自己说话
    它们说的是更好的通用语言

    除非绝对必要r
    e禁止移动DLL和PDB

    symsrv dll完全能够在构建目录中查找dll EXE和pdb

    在visual studio 2010 express中生成依赖于dll(mydll.dll)的exe(mydlluser.exe)
    必须类似于此Walktorugh(
    所有默认值均为零,除了标题包含和引用添加到下面默认项目的标题中的函数的单行代码)

    • 开始->程序->msvcvs2010e->msvcvs2010e
    • 新建项目->win32XXXXX(在中使用控制台) 示例->mydlluser->确定->完成
    • 新建项目->win32XXXXX(再次使用控制台)->mydll->添加到 解决方案->确定
    • 不要单击“完成更改应用程序设置”以生成dll
    • ->应用程序设置->dll&导出符号->完成
    • 将include和lib路径设置为项目属性
    • 项目->属性->配置属性->vc++目录 ->包括->选择mydll文件夹的路径
    • 设置项目依赖项
    • 项目->项目依赖项->mydll
    • 确认依赖项中的生成顺序(默认情况下将生成mydll 依赖于mydll的第一个和第二个mydlluser将在mydll之后构建
      只需确保它是如何设置的
    将头文件mydll.h添加到mydlluser->头文件中
    (如果您正确到达此处,intellisense应在开始键入时显示mydll.h)

    添加调用vsstudio fnmydll()提供的默认伪函数的代码

    单击
    f7以构建exe和dll

    导航到文件夹xxxxx\mydlluser\debug,加载windbg中的mydlluser.exe
    \

    并且dll应该在lm列表中自动可用

    0:000> lm m my*
    start    end        module name
    00400000 0041b000   mydlluser   (deferred)             
    10000000 1001b000   mydll      (deferred)             
    
    。重新加载应能正确找到dll和pdb

    查找
    pdbcopy或binplace
    以将DLL正确存储在
    :000> .reload /f my*
    SYMSRV:  f:\symbols\mydlluser.pdb\2C83FCEAE7EE4AEC822172C75022549E2\mydlluser.pdb not found
    SYMSRV:  http://msdl.microsoft.com/download/symbols/mydlluser.pdb/2C83FCEAE7EE4AEC822172C75022549E2/mydlluser.pdb not found
    *** WARNING: Unable to verify checksum for mydlluser.exe
    DBGHELP: mydlluser - private symbols & lines 
             C:\Documents and Settings\Admin\My Documents\Visual Studio 2010\Projects\mydlluser\Debug\mydlluser.pdb
    
    :\>dir /b *.exe *.dll *.pdb
    mydlluser.exe
    mydll.dll
    mydll.pdb
    mydlluser.pdb
    vc100.pdb
    
    :\>
    
    0:022> .sympath d:\test
    Symbol search path is: d:\test
    Expanded Symbol search path is: d:\test
    
    0:022> .exepath d:\test
    Executable image search path is: d:\test
    Expanded Executable image search path is: d:\test
    
    0:007> lm m note*
    start    end        module name
    00400000 005f5000   notepad__   (deferred)
    
    0:007> lmf m note*
    start    end        module name
    00400000 005f5000   notepad__ C:\Program Files (x86)\Notepad++\notepad++.exe
    
    Symchk /if <dll> /s <pdbdir> /av /od /pf
    
    Symchk /if <dll> /s <pdbdir> /av /od /ps
    
    ChkMatch -c <dll> <pdb>