• 我的内核调试器无法连接


    在windbg中,可以使用Ctrl+Alt+D查看调试器的内部信息流。在KD中,使用Ctrl+D和ENTER来切换输出。启用这个输出,我可以看到调试器无法从调试端口读取数据,而且它正在超时。错误“SYNCTARGET:Timeout.”清楚地表明调试主机无法与调试目标通信,尤其是在“Send Break-in”消息之后出现此错误时。

    因为我在Hyper-V虚拟机上使用命名管道,所以我知道我没有坏电缆,尽管这是导致内核调试失败的常见原因。我还知道虚拟机的配置是正确的,我可以将调试器用于这台服务器上的其他虚拟机。问题很可能是在虚拟机中运行的操作系统。
    通过检查设备管理器,我能够确认在虚拟机中运行的操作系统的配置有问题。bcdedit设置被配置为使用COM1,这将使COM1在操作系统中不可用,但是,COM1出现在设备管理器中。由于某些原因,调试器在启动时没有像配置的那样捕获COM1。

    检查此服务器的bcd配置时,我发现bcd配置不正确。在普通Windows 7或Windows Server 2008 R2操作系统的bcd存储中,bcdedit的Windows引导加载程序部分具有继承设置。您可以使用命令“bcdedit/enum all”从提升的命令提示符查看系统上的此信息。通常,Windows引导加载程序继承{bootloadersettings},{bootloadersettings}继承{globalsettings},{globalsettings}继承{dbgsettings}。如果没有继承设置,则引导加载程序将无法读取调试器配置。
    下面是损坏的虚拟机的bcd设置。您可以看到所有正常继承的设置都丢失了。

    C:Windowssystem32>bcdedit /enum all
    
     
    
    Windows Boot Manager
    
    --------------------
    
    identifier              {bootmgr}
    
    device                  partition=C:
    
    path                    ootmgr
    
    description             Windows Boot Manager
    
    locale                  en-US
    
    default                 {current}
    
    displayorder            {current}
    
    timeout                 30
    
     
    
    Windows Boot Loader
    
    -------------------
    
    identifier              {current}
    
    device                  partition=C:
    
    path                    Windowssystem32winload.exe
    
    description             Windows Server 2008 R2 Standard (recovered)
    
    locale                  en-US
    
    osdevice                partition=C:
    
    systemroot              Windows
    
    resumeobject            {2ec5363f-2a92-11e1-bbe4-806e6f6e6963}
    
    usefirmwarepcisettings  No
    
    debug                   Yes
    
     
    
    Resume from Hibernate
    
    ---------------------
    
    identifier              {2ec5363f-2a92-11e1-bbe4-806e6f6e6963}
    
    device                  partition=C:
    
    path                    Windowssystem32winresume.exe
    
    description             Windows Server 2008 R2 Standard (recovered)
    
    locale                  en-US
    
    inherit                 {resumeloadersettings}
    
    filedevice              partition=C:
    
    filepath                hiberfil.sys
    
    debugoptionenabled      Yes
    
     
    
    Windows Memory Tester
    
    ---------------------
    
    identifier              {memdiag}
    
    device                  partition=C:
    
    path                    ootmemtest.exe
    
    description             Windows Memory Diagnostic
    
    locale                  en-US
    
     
    
    Debugger Settings
    
    -----------------
    
    identifier              {dbgsettings}
    
    debugtype               Serial
    
    debugport               1
    
    baudrate                115200

    因为我对这个虚拟机的唯一兴趣是让调试器工作,所以我没有将所有丢失的设置添加到bcd存储中。我可以使用以下命令强制在引导时读取调试器配置:
    bcdedit/set inherit{dbgsettings}
    我希望这有助于下次您尝试配置调试器但它不起作用。请记住,我们不仅需要打开并配置调试器,还需要继承设置。

  • 相关阅读:
    归并排序法实现
    HuffmanTree
    快速排序法的实现
    随机数发生器说明
    装箱问题改进
    瞬间判断2的幂
    weblogic删除域
    【转】Mock方法介绍
    Oracle 11G空表无法导出处理
    深入理解JVM虚拟机(一):JVM运行时数据区
  • 原文地址:https://www.cnblogs.com/yilang/p/13696132.html
Copyright © 2020-2023  润新知