ERROR: Symbol file could not be found. Defaulted to export symbols for ntkrnlpa.exe - Loading Kern

关于windbg调试符号表配置路径错误的问题探讨 (转载)

打开windbg.exe 开始进行‘内核调试’(kernel debug)时,
命令行窗口输出错误提示 :
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE

*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntkrnlpa.exe - 
Loading Kernel Symbols
..................................................................................................................................................
Loading User Symbols
............................................................................................................
Loading unloaded module list
.........................

当在命令行中输入!process 0 0命令时,output窗口输出内容为:
lkd> !process
NT symbols are incorrect, please fix symbols

以上信息说明 符号文件(symbol files)与当前调试的系统版本不符 或者 符号文件路径设置错误

在下载符号文件时,应该先确定我们将要调试的系统的版本:如版本为xp_sp3_enu,则下载相应的符号文件:WindowsXP-

KB936929-SP3-x86-symbols-update-ENU.exe。如果版本为中文版,则下载相应的CHS版。

下载了符号文件后,解压到个人指定的文件夹-"x:/symbols_folder"。
然后,开始打开windbg调试前,设定系统环境变量''_NT_SYMBOL_PATH'',值为符号文件目录x:/symbols_folder。

(windbg中帮助文件如是写:Before you start the debugger, use the _NT_SYMBOL_PATH and _NT_ALT_SYMBOL_PATH environment variables to set the path. The symbol path is created by appending _NT_SYMBOL_PATH after _NT_ALT_SYMBOL_PATH.)
打开windbg调试前,按下ctrl+s打开"symbol file path"项配置符号文件路径,可填入

x:/symbols_folder;srv*x:/symbols_folder*http://msdl.microsoft.com/download/symbols
其中不同的路径用分号(;)分隔。以上设置srv*x:/symbols_folder*http://msdl.microsoft.com/download/symbols的原因为,当

我们下载下来的符号文件x:/symbols_folder中有缺少或者损坏的文件时,windbg因找不到对应文件而报错(自己就因这个问题而

浪费了大量时间去查错,经过反复设置均不能解决.后来从目录中查到是ntdll.pdb与ntkrnlmp.pdb两个文件不符),当在路径中加入

srv*x:/symbols_folder*http://msdl.microsoft.com/download/symbols后,当windbg找不到对应的符号文件时,就会自动连接

http://msdl.microsoft.com/download/symbols,把缺少的东西下载到x:/symbols_folder。下载期间,我们应耐心等待(时间

的长短视网速及缺少文件数多少而定,整个symbols压缩文件164M。自己下载下来的符号文件中就因ntdll.pdb与ntkrnlmp.pdb不符

而总是报错),之后,动人的一面开始展现:
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
Symbol search path is:

F:/sys_symbols/;F:/sys_symbols;SRV*f:/sys_symbols*http://msdl.microsoft.com/download/symbols
Executable search path is: 
*******************************************************************************
WARNING: Local kernel debugging requires booting with kernel
debugging support (/debug or bcdedit -debug on) to work optimally.
*******************************************************************************
Windows XP Kernel Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 2600.xpsp_sp3_gdr.090804-1435
Kernel base = 0x804d7000 PsLoadedModuleList = 0x805634c0
Debug session time: Sat Mar 20 22:07:50.656 2010 (GMT+8)
System Uptime: 0 days 3:40:45.403


小结:

1. windbg符号文件路径搜索的两个位置:环境变量中的_NT_SYMBOL_PATH设置及windbg中的"symblos file path";

2. 设置srv*x:/symbols_folder*http://msdl.microsoft.com/download/symbols 路径是保证我们能快速正确使用windbg的法门,呵呵。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据错误信息,执行 `tcpdump` 命令时出现了 "executable file not found in $PATH" 的错误。这说明在容器中找不到 `tcpdump` 可执行文件。 这个问题可能是由于容器中没有安装 `tcpdump` 工具导致的。你可以尝试以下解决方案: 1. 首先,确认你的容器中是否已经安装了 `tcpdump` 工具。你可以通过在容器中执行以下命令来检查: ```shell kubectl exec [POD] -c [CONTAINER] -- which tcpdump ``` 其中 `[POD]` 是你的 Pod 名称,`[CONTAINER]` 是你想要检查的容器名称。如果没有安装,则需要在容器中安装 `tcpdump` 工具。 2. 如果你的容器使用的是基础镜像,可以尝试在 Dockerfile 或 Kubernetes 配置文件中添加安装 `tcpdump` 的步骤。例如,在 Dockerfile 中可以添加以下命令来安装 `tcpdump`: ```Dockerfile RUN apt-get update && apt-get install -y tcpdump ``` 或者,在 Kubernetes 配置文件的 `containers` 部分中添加以下内容来安装 `tcpdump`: ```yaml containers: - name: [CONTAINER_NAME] image: [IMAGE_NAME] command: ["sh", "-c"] args: - apt-get update && apt-get install -y tcpdump && [YOUR_COMMAND] ``` 其中 `[CONTAINER_NAME]` 是容器的名称,`[IMAGE_NAME]` 是容器使用的镜像名称,`[YOUR_COMMAND]` 是你想要在容器中执行的其他命令。 3. 如果你无法修改容器的配置或镜像,可以考虑在容器外部执行 `tcpdump` 命令。你可以使用宿主机上的工具来抓取 Pod 的网络流量,例如在宿主机上使用 `tcpdump` 命令。 希望这些解决方案能够帮助你解决问题!如果还有其他问题,请随时提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值