19 Star 36 Fork 56

openEuler / X-diagnosis

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MulanPSL-2.0

x-diagnosis

概述

X-diagnosis基于EulerOS维护团队多年运维经验,通过对案例的总结/分析形成的系统运维套件, 主要功能包含问题定位工具集、系统巡检、ftrace增强等功能。

安装x-diagnose

(1) 工具集代码直接编译安装

1)编译依赖

  • python 3.7+
  • elfutils-devel clang llvm libbpf libbpf-devel libbpf-static bpftool dwarves
  • kernel-debuginfo gdb

2)编译

  • cd build; sh build.sh -i xxxx(指定安装路径,默认安装在/usr/bin/xdiag/ebpf/)

(2) 下载rpm包

rpm -ivh xdiagnose-1.x-x.rpm

1. 命令汇总

  • xdiag
  • xd_tcpreststack
  • xd_tcpskinfo
  • xd_arpstormcheck
  • xd_netvringcheck
  • xd_sysinspect
  • xd_scsiiocount
  • xd_scsiiotrace
  • xd_ext4fsstat
  • xd_iolatency
  • xd_rtnlcheck
  • xd_skblen_check
  • xd_tcphandcheck
  • xd_ntrace

1.0 xdiag

usage: xdiag [-h] [--inspect] {eftrace,ntrace} ...

xdiagnose tool

optional arguments:
  -h, --help            show this help message and exit
  --inspect             inspector module

select module:
  {tcphandcheck,eftrace,ntrace,hook}
    eftrace             eftrace module
    ntrace              net trace module

--inspect :系统异常巡检(可以和select module一起使用)支持如下检测项:

  • ipv6路由缓存满
  • TIMEWAIT状态链接满
  • arp、连接跟踪满
  • snmp或者stat异常
  • 网卡异常统计pause帧、tx_timeout、drop、error
  • bond4异常检测: 1)网卡速率不相等 2)lacp协商没有成功
  • tcp、udp、ip分片等内存满
  • dns无法解析(gethostbyname)
  • cron没法运行
  • ntp时钟不准
  • ip冲突检测
  • cpu冲高检测
  • 磁盘满、inode句柄不足
  • 内存不足、sysctl/sshd配置运行过程中修改

tcphandcheck:跟踪tcp的3次握手阶段经常会出现问题,支持定位如下问题:

  • 连接队列满
  • bind失败
  • timewait链接复用失败
  • 文件句柄超出导致无法创建socket
  • 端口复用场景下链接闪断后seq序号异常导致的无法建链

eftrace

概述

eftrace是ftrace命令生成的偏移计算辅助工具。用户可以使用eftrace方便地生成不同内核版本下的ftrace命令。

使用方法

(1) 举例:

生成在协议栈调用ip_rcv_core函数时打印源地址为192.168.56.102的命令:

xdiag eftrace 'p:ip_rcv_core ip_rcv_core srcip=(struct iphdr *)($r0->data)->saddr f:srcip==0x6638a8c0'

生成在协议栈调用inet_csk_accept函数结束时返回值为0的命令:

xdiag eftrace 'r:inet_csk_accept inet_csk_accept ret=$retval f:ret==0'

(2) 命令解析:

  • p: 表示kprobe event
  • r: 表示kretprobe event
  • f: 表示kprobe filter过滤
  • $rx 表示函数参数,x为参数位置,第一个参数为$r0

(3) 可以使用强制类型转换,以及手动指定偏移:

xdiag eftrace 'p:ip_rcv_finish ip_rcv_finish
srcip=(struct iphdr *)($r2->data)->saddr
srcport=(struct tcphdr *)($r2->data + 20)->source'

在函数ip_rcv_finish中,sk_buffdata成员是unsigned char *类型,指向报文的ip头,可以强制转换为iphdr *获取ip头的内容。

当想获取tcp头的内容时,对data进行ip头长度的偏移后可指向tcp头并获取信息。

额外的偏移可以直接指定,或者使用sizeof的方式获取偏移长度:

srcport=(struct tcphdr *)($r2->data + sizeof(struct iphdr))->source

sysinspect

参数说明

sysinspect [-i interval] [-r rotate] [-d dest] [-z gzip] [-s size] [-c cpu_thresh] [-m mem_thresh] [-o]

  • -i interval: 收集日志的时间间隔,单位秒
  • -r rotate: 保留日志的份数
  • -d dest: 日志文件保存的路径
  • -z gzip: 用于压缩日志文件的命令,默认gzip
  • -s size: 指定该参数后使用日志文件的大小(MB)进行日志分割,超过设定值后会被压缩保存。不指定该参数默认按照小时压缩分割
  • -o: 只记录触发CPU、内存阈值门限时的日志。如不指定该参数,则按照时间间隔收集日志
  • -c cpu_thresh: CPU使用率的阈值,超过阈值、恢复阈值会触发日志记录
  • -m mem_thresh: 内存使用率的阈值,超过阈值、恢复阈值会触发日志记录

日志收集方式

  • 每个interval在系统内收集一次信息
  • cpu,mem统计以interval为间隔,通过读取/proc下的数据计算使用率

使用示例

以时间为单位抓取日志

sysinspect -i 30 -r 48

  • -i 30: 每30秒收集一次日志
  • -r 48: 每小时分割一次日志文件,保留48份日志

以CPU、内存使用率阈值抓取日志

sysinspect -i 30 -r 20 -s 10 -c 80

  • -i 30 CPU、内存检查时间间隔30秒
  • -r 20 日志文件保留20份
  • -s 10 日志文件分割大小10(MB)。当日志文件达到指定值10MB时会进行分割
  • -c 80 指定CPU阈值,CPU使用率达到80%时记录一次日志;当使用率降至阈值以下,并重新冲高超过阈值,会再次记录

ntrace:

usage: xdiag ntrace [-h] [-r READ_FILE] [-w WRITE_FILE] [-t TIMEOUT] [--qlen QLEN] [--cpu_mask CPU_MASK] [-b] [-i INTERFACE] {tcp,udp,icmp} ...

optional arguments:
  -h, --help            show this help message and exit
  -r READ_FILE, --read_file READ_FILE
                        read an existing trace file
  -w WRITE_FILE, --write_file WRITE_FILE
                        trace write to a specified file
  -t TIMEOUT, --timeout TIMEOUT
                        specify a running time of process
  --cpu_mask CPU_MASK   set ftrace cpu tracing_mask
  -i INTERFACE, --interface INTERFACE
                        specify an interface

select protocol:
  {tcp,udp,icmp}
    tcp                 tcp protocol
    udp                 udp protocol
    icmp                icmp protocol

expression :指定一个过滤报文的表达式,协议[tcp|udp],地址[host|src|dst],端口号[port|sport|dport],逻辑运算符[and|or]。
-r READFILE:读取一个已存在的trace输出文件,比如/var/log/x-diagnose/rawlog/raw_diag.log
-w WRITEFILE:将trace命令日志写入文件
-i INTERFACE:指定抓取的网卡
-t TIMEOUT:运行时间,单位为秒
--cpu_mask CPU_MASK:设置ftrace的cpumask用以跟踪指定的cpu

说明: 由于使用ftrace实现,xdiag下的select module功能模块不能复用

hook:在定位问题时,方便确认各hook点的流程,跟踪这些钩子函数:

Usage: hook [ OPTIONS ]
    --dev            网络设备过滤
    --host           IP地址过滤

1.1 xd_tcpreststack

Usage: xd_tcpreststack [ OPTIONS ]
    -h,--help           this message
    -t,--time           The frequency of the probe/ms
    -d,--depth           Kernel stack Depth\n

功能:

监控tcp协议栈(v4/v6)reset信息。

-t,--time

监控的时间间隔,单位ms, 建议保持默认值500ms;

-d,--depth

内核调用栈深度,默认3层

1.2 xd_tcpskinfo

Usage: xd_tcpskinfo [ OPTIONS ]
    -h,--help           this message
    -a,--addr           filter IP addr
    -p,--port           filter port

功能:

查看tcp链接socket关键的信息,ss命令抓的信息不够全部一些关键信息没有包含。该工具总结tcp链接在debug过程 中经常需要的信息,用来辅助协议栈问题定位。包括如下信息:

-a,--addr

IP地址过滤,不区分源地址或者目的地。

-p,--port

端口过滤,不区分源端口或者目的端口。

1.3 xd_arpstormcheck

Usage: xd_arpstormcheck [ OPTIONS ]
    -h,--help           this message
    -i,--interval       The interval time of the probe/s
    -c,--count          check count, default 1
    -f,--freq           filter freq, $$ times per second

功能:

监控当前网络是否发发生网络风暴。

-i,--interval

监控的时间间隔,默认1s。

-c,--count

总监控的次数,监控次数完成后监控工具自动退出。

-f,--freq

监控的告警阈值,每秒收到的报文,超过了此阈值,则告警提示网络风暴相关信息;

1.4 xd_netvringcheck

Usage: xd_netvringcheck DEVNAME [rx/tx] [ OPTIONS ]
  [OPTIONS]
	-h,--help			this message
	-i,--interval			The interval time of the probe/s
	-q,--queueidx			filter virtnet queue idx

功能:

用于监控virt_net 网卡前后端virtqueue ring的使用状态.

DEVNAME

指定需要监控的网卡名称,无默认值,强制指定.

[rx/tx]

指定收发队列(发送:tx,接收:rx),无默认值,强制指定.

-i,--interval

监控的时间间隔,默认1s.

-q,--queueidx

网卡队列的序号,默认监控此网卡的所有队列.

1.5 xd_scsiiotrace

USAGE: xd_scsiiotrace [--help] [-d h:c:t:l] [-E]

EXAMPLES:
    xd_scsiiotrace                 # Report all scsi cmnd result
    xd_scsiiotrace -E              # Report error/timeout scsi cmnd result
    xd_scsiiotrace -p 0x8000002    # Parse the scsi cmnd result.
    xd_scsiiotrace -d 0:0:0:1      # Trace the scsi device only.

  -d, --device=h:c:t:l       Trace this scsi device only
  -E, --error                Trace error/timeout scsi cmnd. (default trace all
                             scsi cmnd)
  -p, --parse=result         Parse the scsi cmnd result.(format hex)
  -?, --help                 Give this help list
      --usage                Give a short usage message

功能:

用于监控scsi命令执行结果:
DRIVER_RESULT: 驱动返回结果
SCSI_RESULT: SCSI转换后的结果。
DISPOSION:
1)SUCCESS:成功
2)NEEDS_RETRY/ADD_TO_MLQUEUE:重新入队列
3)TIMEOUT_ERROR: 命令超时

-d,--device

指定需要监控的设备,默认监控所有。

-E,--error

只监控不成功的命令(错误或者超时),默认监控所有命令。

-p,--parse

用于解析 DRIVER_RESULT或者SCSI_RESULT值具体含义. 默认显示hex值

1.6 xd_scsiiocount

USAGE: xd_scsiiocount [--help] [-t times] [-d device] [-i interval]

EXAMPLES:
    xd_scsiiocount		# report all scsi device I/O scsi cmnd count
    xd_scsiiocount -i 10	# print 10 second summaries
    xd_scsiiocount -d sdc	# Trace sdc only
    xd_scsiiocount -t 5		# report times

  -d, --device=device        Trace this disk only
  -i, --interval=interval    refresh interval(secs)
  -t, --times=times          report scsi device I/O times
  -?, --help                 Give this help list
      --usage                Give a short usage message

功能:

用于监控scsi命令下发的命令统计.

-d,--device

指定需要监控的设备,默认监控所有。

-i,--interval

监控的时间间隔,默认5s。

-t,--times

监控的次数. 次数达到后,则结束本次监控

1.7 xd_ext4fsstat

USAGE: xd_ext4fstat [--help] [-t times] [-i interval] [-s SORT] [-o opcode]

EXAMPLES:
    xd_ext4fsstat		#Trace file read/write stat for ext4 filesystem
    xd_ext4fsstat -i 10		#printf 10 second summaries
    xd_ext4fsstat -m /mnt/test	#Trace the special mount point for ext4 filesystem.
    xd_ext4fsstat -s r		#Sort the read bytes
    xd_ext4fsstat -o r		#Trace read only, default read and wriete
    xd_ext4fsstat -t 5		#Trace 5 times
    xd_ext4fsstat -v p		#show the pid view

  -c, --clean                Clean the trace data
  -C, --clear                Clear the screen
  -i, --interval=INTERVAL    Refreash interval(secs), default 5s.
  -m, --mnt=MNTPOINT         the special mount point
  -o, --opcode=OPCODE        Trace file r/w, defalut both.
  -p, --pid=PID              Trace the pid only
  -s, --sort=SORT            Sort r/w/wb, default read
  -t, --times=TIMES          Trace times
  -T, --top=TOP              show the topN (1~8192)
  -v, --view=VIEW            p:pids view, f: files view, defaut file view
  -?, --help                 Give this help list
      --usage                Give a short usage message

功能:

用于监控ext4 文件系统读/写数据量统计.

-c,--clean

每个周期统计完数据后,历史数据将被清空,重新统计,默认是累积.

-C,--clear

每个周期显示统结果后,清理屏幕

-i,--interval

监控的时间间隔,默认5s.

-m,--mnt

指定监控特定ext4挂载点数据.

-o,--opcode

指定监控read或者write,默认两者都监控.

-p,--pid

指定监控特定pid.

-s,--sort

指定对监控数据进行排序,默认对read进行排序.

-t,--times

监控的次数. 次数达到后,则结束本次监控.

-T,--top

指定只显示top数据,默认显示所有监控到的数据.

-v,--view

指定显示模式,p:进程模式,f:文件默认,默认只显示文件模式 注:进程模式下,多进程对同一有写入场景下,显示的writeback数据为文件写入总数据 非该单进程写入总数据.

1.8 xd_iolatency

USAGE: xd_iolatency [--help] [-d device] [-i ISSUE] [-T times] [-t time]

EXAMPLES:
    xd_iolatency		# Trace device I/O latency
    xd_iolatency -d sdb		# Trace the sdb only
    xd_iolatency -t 10    	# Trace the time
    xd_iolatency -i D2C		# Trace the D2C issue only

  -c, --clean			Clean the history data
  -d, --device=DEVICE		Trace the disk only
  -i, --issue=ISSUE		Trace the issue (Q2G,Q2M,G2M,G2I,I2D,D2C)
  -m, --milliseconds		Millisecond histogram
  -t, --time=TIME		Trace the I/O latency time
  -T, --times=TIMES		Trace the I/O latency times
  -?, --help			Give this help list
      --usage			Give a short usage message

功能:

用于跟踪block设备的IO时延情况

-c,--clean

每个周期统计完数据后,历史数据将被清空,重新统计,默认是累积.

-d,--device=DEVICE

指定需要监控的设备

-i,--issue=ISSUE

指定需要监控IO时延阶段(Q2G,Q2M,G2M,G2I,I2D,D2C)

-m,--milliseconds

显示为时延单位为毫秒,默认为微妙.

-t,--time=TIME

监控时长,单位秒.

-T,--times=TIMES

监控的次数. 次数达到后,则结束本次监控.

1.9 xd_rtnlcheck

USAGE xd_rtnlcheck (无参数)

EXAMPLE:  xd_rtnlcheck    #Check rtnl_mutex's owner

功能:

用于检测当前是否有进程持有rtnl_mutex锁,如果有则输出其pid和comm.

1.10 xd_skblen_check

USAGE xd_skblen_check (无参数)

EXAMPLE:  xd_skblen_check    #Check skblen

功能:

用于检测网络包的长度和实际的数据长度是否相等,如果不相等则输出其mac地址、协议号和报文长度.

1.11 xd_tcphandcheck

USAGE xd_tcphandcheck (无参数)

EXAMPLE:  xd_tcphandcheck

功能:

支持连接队列满 支持bind失败 支持timewait链接复用失败 支持文件句柄超出导致无法创建socket 支持端口复用场景下链接闪断后seq序号异常导致的无法建链

1.12 xd_ntrace

Start network stack trace [support v4/v6 and tcp/udp/icmp]

Usage: ./xd_ntrace [...]
-p, --protocol <tcp/udp/icmp/icmp6> protocol
-H, --host      <src/dest ip>
-P, --hostport  <src/dest port>
-h, --help      Display this help

功能:

协议栈丢包检测工具(当前支持ipv6、ipv4下的ping丢包检测,tcp和udp后续会支持) 支持18种类型的协议栈丢包类型检测。

木兰宽松许可证, 第2版 木兰宽松许可证, 第2版 2020年1月 http://license.coscl.org.cn/MulanPSL2 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 0. 定义 “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 “法人实体”是指提交贡献的机构及其“关联实体”。 “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 1. 授予版权许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 2. 授予专利许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 3. 无商标许可 “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 4. 分发限制 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 5. 免责声明与责任限制 “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 6. 语言 “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 条款结束 如何将木兰宽松许可证,第2版,应用到您的软件 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 3, 请将如下声明文本放入每个源文件的头部注释中。 Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. Mulan Permissive Software License,Version 2 Mulan Permissive Software License,Version 2 (Mulan PSL v2) January 2020 http://license.coscl.org.cn/MulanPSL2 Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 0. Definition Software means the program and related documents which are licensed under this License and comprise all Contribution(s). Contribution means the copyrightable work licensed by a particular Contributor under this License. Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. Legal Entity means the entity making a Contribution and all its Affiliates. Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 1. Grant of Copyright License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 2. Grant of Patent License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 3. No Trademark License No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 5. Disclaimer of Warranty and Limitation of Liability THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Language THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. END OF THE TERMS AND CONDITIONS How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.

简介

OS debug toolkit 展开 收起
C 等 4 种语言
MulanPSL-2.0
取消

发行版 (1)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/openeuler/X-diagnosis.git
git@gitee.com:openeuler/X-diagnosis.git
openeuler
X-diagnosis
X-diagnosis
master

搜索帮助