【鸿蒙南向开发】OpenHarmony——hilog命令行使用手册

208 篇文章 0 订阅
207 篇文章 0 订阅

为了让刚入门的鸿蒙开发者迅速掌握hilog工具的使用方法,特编写了该篇命令行使用手册供开发者查阅,让开发者在自己的的开发和调试的过程中充分认识hilog工具的优势和便捷。

一、查询日志

1.1、指定模块查询

-t 用于指定输出日志的类型/模块,目前系统共包含app/core/kmsg/init四种日志类型。

hilog -t app|core|kmsg|init 阻塞式实时查询模块日志,-t可以与其他参数一起使用。

hilog -t app|core|kmsg|init -x 非阻塞式实时查询模块日志,-x选项也可以和hilog的其他选项同时使用。

示例如下:

# hilog -t kmsg
01-01 00:00:03.909     0     0 I fffff/kmsg: Booting Linux on physical CPU 0x0
01-01 00:00:03.909     0     0 W fffff/kmsg: Linux version 5.10.79 (osm@ubuntu) (OHOS () clang version 10.0.1.480513  (llvm-project b2cadc87d64786377748bdb6bc5e6949492f01ab), GNU ld (Linaro_Binutils-2019.12) 2.28.2.20170706) #1 SMP Wed Apr 6 09:37:37 CST 2022
01-01 00:00:03.909     0     0 I fffff/[410fc075]: CPU: ARMv7 Processor  revision 5 (ARMv7), cr=10c5387d
01-01 00:00:03.909     0     0 I fffff/kmsg: CPU: div instructions available: patching division code
01-01 00:00:03.909     0     0 I fffff/kmsg: CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
01-01 00:00:03.909     0     0 I fffff/kmsg: OF: fdt: Machine model: Hisilicon HI3516DV300 DEMO Board
01-01 00:00:03.909     0     0 I fffff/kmsg: Memory policy: Data cache writealloc
01-01 00:00:03.909     0     0 D fffff/kmsg: cma: dma_contiguous_reserve(limit ffffffff)
01-01 00:00:03.909     0     0 D fffff/kmsg: cma: dma_contiguous_reserve: reserving 64 MiB for global area

1.2、指定tag查询

-T选项为指定tag。标签:用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。

hilog -t app|core|kmsg|init -T <tag> 模块内指定tag, -T可以与其他参数一起使用。

hilog -T <tag> 只指定tag

示例如下:

# hilog -t core -T BatteryThread

01-02 02:10:03.771   725   820 I 02500/BatteryThread: UpdateBatteryInfo: BatteryInfo capacity=11, voltage=4123456, temperature=222, healthState=1, pluggedType=2, pluggedMaxCurrent=-1, pluggedMaxVoltage=-1, chargeState=3, chargeCounter=4000000, present=0, technology=Li-ion
01-02 02:10:03.771   725   820 I 02500/BatteryThread: UpdateBatteryInfo g_callback is nullptr
01-02 02:10:03.771   725   820 I 02500/BatteryThread: LoopingThreadEntry: timeout=-1, nevents=1
01-02 02:10:13.772   725   820 I 02500/BatteryThread: UpdateBatteryInfo: BatteryInfo capacity=11, voltage=4123456, temperature=222, healthState=1, pluggedType=2, pluggedMaxCurrent=-1, pluggedMaxVoltage=-1, chargeState=3, chargeCounter=4000000, present=0, technology=Li-ion
01-02 02:10:13.772   725   820 I 02500/BatteryThread: UpdateBatteryInfo g_callback is nullptr
01-02 02:10:13.772   725   820 I 02500/BatteryThread: LoopingThreadEntry: timeout=-1, nevents=1
01-02 02:10:23.772   725   820 I 02500/BatteryThread: UpdateBatteryInfo: BatteryInfo capacity=11, voltage=4123456, 

# hilog -T BatteryThread

01-02 02:14:03.771   725   820 I 02500/BatteryThread: UpdateBatteryInfo: BatteryInfo capacity=11, voltage=4123456, temperature=222, healthState=1, pluggedType=2, pluggedMaxCurrent=-1, pluggedMaxVoltage=-1, chargeState=3, chargeCounter=4000000, present=0, technology=Li-ion
01-02 02:14:03.771   725   820 I 02500/BatteryThread: UpdateBatteryInfo g_callback is nullptr
01-02 02:14:03.771   725   820 I 02500/BatteryThread: LoopingThreadEntry: timeout=-1, nevents=1
01-02 02:14:13.772   725   820 I 02500/BatteryThread: UpdateBatteryInfo: BatteryInfo capacity=11, voltage=4123456, temperature=222, healthState=1, pluggedType=2, pluggedMaxCurrent=-1, pluggedMaxVoltage=-1, chargeState=3, chargeCounter=4000000, present=0, technology=Li-ion

1.3、指定level查询

-L 指定日志级别,HiLog中定义了DEBUG、INFO、WARN、ERROR、FATAL五种日志级别。

hilog -t app|core|kmsg|init -L D|I|W|E|F 模块内指定level查询,D:debug, I:info, W:warning, E:error, F:fatal。

hilog -L D|I|W|E|F 只指定level查询,可以与其他参数一起使用

示例如下:

# hilog -t app -L I

01-01 08:15:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
01-01 08:15:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: EventManager --> publish localEvent type: Time_Change_Event
01-01 08:16:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: CommonEvent_TimeManager --> handle common event: usual.event.TIME_TICK
01-01 08:16:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
01-01 08:16:00.032   875   875 I 02200/JsApp: SystemUI_Default tag: EventManager --> publish localEvent type: Time_Change_Event
01-01 08:17:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: CommonEvent_TimeManager --> handle common event: usual.event.TIME_TICK

# hilog -L I

01-01 08:15:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
01-01 08:15:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: EventManager --> publish localEvent type: Time_Change_Event
01-01 08:16:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: CommonEvent_TimeManager --> handle common event: usual.event.TIME_TICK
01-01 08:16:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
01-01 08:16:00.032   875   875 I 02200/JsApp: SystemUI_Default tag: EventManager --> publish localEvent type: Time_Change_Event
01-01 08:17:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: CommonEvent_TimeManager --> handle common event: usual.event.TIME_TICK

1.4、指定domain查询

-D选项为指定domain。服务域:日志的服务域,用于指定输出日志所对应的业务领域。这是一个十六进制整数,范围从 0x0 到 0xFFFFF。建议使用0xAAABB格式,其中AAA表示子系统,BB表示模块。

hilog -t app|core|kmsg|init -D <domian> 模块内指定domian查询。

hilog -D <domain> 只指定domian查询,可以与其他参数一起使用。

# hilog -D 0x0 -t core                                                          

01-01 04:36:03.140    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                       
01-01 04:36:05.299    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:36:07.459    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:36:09.619    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:36:11.780    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:36:13.939    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:36:16.099    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:36:18.259    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:36:20.419    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                              

  # hilog -D 0x0                                                                  

01-01 04:37:01.459    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:37:03.619    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:37:05.779    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:37:07.939    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:37:10.100    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:37:12.260    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:37:14.419    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                                          
01-01 04:37:16.579    91   145 I 00000/AppSpawnServer: AppSpawnServer::ConnectionPeer connectFd is -11                                

1.5、排除查询

type、level、domain、tag支持排除查询,排除查询可以使用以"^“开头的参数和分隔符”,"来完成

hilog [-t ^app|kmsg|init|core] [-T ^<tag>] [-L ^D|I|W|E|F] [-D ^<domain>]

示例如下:

# hilog -t ^app,kmsg,init -T ^BatteryThread

01-02 02:07:00.071   332   332 E 01400/OHOS::ROSEN: RsDebug RSHardwareProcessor::ProcessSurface surfaceNode id:3758096384048 name:[SystemUi_NavigationBar] dst [0 912 480 48]SrcRect [480 48] rawbuffer [480 48] surfaceBuffer [480 48] buffaddr:0x1249230, z:2.000000, globalZOrder:2, blendType = 3
01-02 02:07:00.071   332   332 D 01400/OHOS::ROSEN: RsDebug RSHardwareProcessor::CropLayers this layer no need to crop
01-02 02:07:00.071   332   332 D 01400/OHOS::ROSEN: RsDebug RSHardwareProcessor::CropLayers this layer no need to crop
01-02 02:07:00.071   332   332 D 01400/OHOS::ROSEN: RsDebug RSHardwareProcessor::CropLayers this layer no need to crop
01-02 02:07:00.071   332   332 D 01400/Composer: Repaint: Repaint: start
01-02 02:07:00.071   332   332 D 01400/DISP: [SetLayerAlpha@hdi_session.cpp:273]
01-02 02:07:00.071   332   332 D 01400/DISP: [CallLayerFunction@hdi_session.h:48] device Id : 0
01-02 02:07:00.071   332   332 D 01400/DISP: [GetHdiLayer@hdi_display.cpp:221] id : 3

二、查询和设置信息

2.1、查询和设置模块的buffer

2.1.1、查询模块的buffer

显示的日志内容为各模块buffer里当前缓存的内容,并实时更新,超出buffer的内容会覆盖掉旧的内容。

hilog -g -t app|core|kmsg|init 查询日志类型为app/core/kmsg/init的buffer大小:

示例如下:

# hilog -g -t core

core buffer size is 256K

#

2.1.2、设置模块的buffer

hilog -G <size> -t app|core|kmsg|init 设置指定日志类型缓冲区的大小,配合-t指定某一类型使用,默认app和core, 可使用B/K/M/G为单位

示例如下:

# hilog -t app -g

app buffer size is 256K

# hilog -t app -G 2M

app buffer size is 2M

# hilog -t app -g

app buffer size is 2M

#

2.1.3、清除buffer日志

hilog -t app|core|kmsg|init -r -r选项清除buffer日志,配合-t指定某一类型使用,默认app和core

# hilog -t app -r

app log clear success

# hilog -t app

#

2.2、查询和清除统计信息

2.2.1、查询统计信息

hilog -t app|core|kmsg|init -s -s查询统计信息,需配合-t或-D使用

示例如下:

# hilog -t app -s

app print log length is 1M
app cache log length is 461K
app dropped log lines is 0B
#

2.2.2、清除统计信息

hilog -t app|core|kmsg|init -S -S清除统计信息,需配合-t或-D使用

# hilog -t app -s

app print log length is 1M
app cache log length is 461K
app dropped log lines is 0B
#
#

# hilog -t app -S

app statistic info clear success

# hilog -t app -s

app print log length is 0B
app cache log length is 0B
app dropped log lines is 0B
#

三、日志落盘

3.1 使用方法

hilog -w start [-f "xxx"] [-l <length>] [-j <jobid>] [-m <algorithm>] [-n <number>] 启动落盘任务

hilog -w query [-j <jobid>] 查询落盘任务

hilog -w stop [-j <jobid>] 停止落盘任务

示例如下:

# hilog -w query
#
#hilog -w start -f "hilog" -l 66k -j 222 -m zlib -n 2                          
Persist task [jobid:222] started successfully
#cd /data/log/hilog
#
# ls -al

total 100
drwxr-x--- 2 logd   log     4096 1970-01-02 03:34 .
drwxrwx--- 6 system log     4096 1970-01-01 00:38 ..
-rw-r----- 1 logd   system 65540 1970-01-02 03:34 .persisterInfo_222
-rw-r----- 1 logd   system   132 1970-01-02 03:34 .persisterInfo_222.info
-rw-r----- 1 logd   system 12239 1970-01-02 03:34 hilog.002.19700102-033431.gz
-rw-r----- 1 logd   system  6883 1970-01-02 03:34 hilog.003.19700102-033431.gz

# hilog -w query -j 222 #指定jobid查询

222 core,app zlib /data/log/hilog/hilog 67584 2

# hilog -w query    #查询全部落盘任务

222 core,app zlib /data/log/hilog/hilog 67584 2

# hilog -w stop -j 222

Persist task [jobid:222] stopped successfully

# ls -al

total 36
drwxr-x--- 2 logd   log     4096 1970-01-02 03:35 .
drwxrwx--- 6 system log     4096 1970-01-01 00:38 ..
-rw-r----- 1 logd   system 12239 1970-01-02 03:34 hilog.002.19700102-033431.gz
-rw-r----- 1 logd   system 13000 1970-01-02 03:35 hilog.003.19700102-033431.gz

# 

3.2 案例展示

案例需求:抓取模块最早的log,即:开机启动过程中模块产生的log,并将内容保存到文件导出设备

第一步:启动落盘任务

示例如下:

#

# hilog -w start -f "hilog" -l 66k -j 111 -m zlib -n 2 -t kmsg

Persist task [jobid:111] started successfully
#
#cd /data/log/hilog
#
# ls -al 

total 116
drwxr-x--- 2 logd   log     4096 1970-01-02 19:31 .
drwxrwx--- 6 system log     4096 1970-01-01 00:38 ..
-rw-r----- 1 logd   system 65540 1970-01-02 19:31 .persisterInfo_111
-rw-r----- 1 logd   system   132 1970-01-02 19:31 .persisterInfo_111.info
-rw-r----- 1 logd   system 19245 1970-01-02 19:31 hilog.000.19700102-193128.gz
-rw-r----- 1 logd   system 16069 1970-01-02 19:31 hilog.001.19700102-193128.gz
#

第二步:重启设备

# reboot

D:\share>

第三步:设备起来后,停止落盘任务。

D:\share>hdc_std.exe shell
#
# cd /data/log/hilog/
#
# ls -al

total 108
drwxr-x--- 2 logd   log     4096 1970-01-02 19:32 .
drwxrwx--- 6 system log     4096 1970-01-01 00:38 ..
-rw-r----- 1 logd   system 65540 1970-01-02 19:32 .persisterInfo_111
-rw-r----- 1 logd   system   132 1970-01-02 19:32 .persisterInfo_111.info
-rw-r----- 1 logd   system 16192 1970-01-02 19:31 hilog.003.19700102-193147.gz #注意:log文件的命名是随时间实时更新的
-rw-r----- 1 logd   system  8500 1970-01-02 19:32 hilog.004.19700102-193213.gz
#
# hilog -w stop

Persist task [jobid:111] stopped successfully

# ls -al

total 36
drwxr-x--- 2 logd   log     4096 1970-01-02 19:34 .
drwxrwx--- 6 system log     4096 1970-01-01 00:38 ..
-rw-r----- 1 logd   system 16192 1970-01-02 19:31 hilog.003.19700102-193147.gz
-rw-r----- 1 logd   system  8500 1970-01-02 19:32 hilog.004.19700102-193213.gz
#
#

第四步:将log文件导出设备,即可得到模块的启动log文件。

#
# exit

D:\share>hdc_std.exe file recv /data/log/hilog/hilog.003.19700102-193147.gz D:\share
FileTransfer finish, Size:16192 time:55ms rate:294.40kB/s

D:\share>hdc_std.exe file recv /data/log/hilog/hilog.004.19700102-193213.gz D:\share
FileTransfer finish, Size:8500 time:25ms rate:340.00kB/s

D:\share>
D:\share>dir
......
2022/05/09  14:04         3,424,768 hdc_std.exe
2022/05/20  10:24            16,192 hilog.003.19700102-193147.gz
2022/05/20  10:25             8,500 hilog.004.19700102-193213.gz
......
D:\share>

四、其他辅助命令

-a <n> 只显示前行日志

-z 只显示后行日志

示例如下;

# hilog -t app -a 5

01-02 03:12:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: CommonEvent_TimeManager --> handle common event: usual.event.TIME_TICK
01-02 03:12:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
01-02 03:12:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: EventManager --> publish localEvent type: Time_Change_Event
01-02 03:13:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: CommonEvent_TimeManager --> handle common event: usual.event.TIME_TICK
01-02 03:13:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
#
# 
# hilog -t app -z 5

01-02 04:02:00.032   875   875 I 02200/JsApp: SystemUI_Default tag: EventManager --> publish localEvent type: Time_Change_Event
01-02 04:02:00.032   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
01-02 04:02:00.031   875   875 I 02200/JsApp: SystemUI_Default tag: CommonEvent_TimeManager --> handle common event: usual.event.TIME_TICK
01-02 04:01:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: EventManager --> publish localEvent type: Time_Change_Event
01-02 04:01:00.030   875   875 I 02200/JsApp: SystemUI_Default tag: TimeManager --> notifyTimeChange
#

这里只演示了常用的命令选项,如果需要其他选项请自行查阅附件表格,或通过hilog -h查询。

附:hilog命令行使用表格

短选项长选项参数说明
-h–help帮助命令
缺省缺省阻塞读日志,不退出
-x–exit非阻塞读日志,读完退出
-g查询buffer的大小,配合-t指定某一类型使用,默认app和core
-G–buffer-size设置指定日志类型缓冲区的大小,配合-t指定某一类型使用,默认app和core, 可使用B/K/M/G为单位
-r清除buffer日志,配合-t指定某一类型使用,默认app和core
-p–privacy<on/off>支持系统调试时日志隐私开关控制
on打开隐私开关,显示
off关闭隐私开关,显示明文
-k<on/off>Kernel日志读取开关控制
on打开读取kernel日志
off关闭读取kernel日志
-s–statistics查询统计信息,需配合-t或-D使用
-S清除统计信息,需配合-t或-D使用
-Q流控缺省配额开关控制
pidon进程流控开关打开
pidoff进程流控开关关闭
domainondomain流控开关打开
domainoffdomain流控开关关闭
-L–level指定级别的日志,示例:-L D/I/W/E/F
-t–type指定类型的日志,示例:-t app core init
-D–domain指定domain
-T–Tag指定tag
-a–head只显示前行日志
-z–tail只显示后行日志
-P–pid标识不同的pid
-e–regex只打印日志消息与匹配的行,其中是一个正则表达式
-f–filename设置落盘的文件名
-l–length设置落盘的文件大小,需要大于等于64K
-n–number设置落盘文件的个数
-j–jobid设置落盘任务的ID
-w–write落盘任务控制
query落盘任务查询
start落盘任务开始,命令行参数为文件名、单文件大小、落盘算法、rotate文件数目.
stop落盘任务停止
-m–stream落盘方式控制
none无压缩方式落盘
zlibzlib压缩算法落盘,落盘文件为.gz
zstdzstd压缩算法落盘,落盘文件为.zst
-v–format
time显示本地时间
color显示不同级别显示不同颜色,参数缺省级别颜色模式处理(按黑白方式)
epoch显示相对1970时间
monotonic显示相对启动时间
usec显示微秒精度时间
nsec显示纳秒精度时间
year显示将年份添加到显示的时间
zone显示将本地时区添加到显示的时间
-b–baselevel设置可打印日志的最低等级:D(DEBUG)/I(INFO)/W(WARN)/E(ERROR)/F(FATAL)

写在最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)文档用来跟着学习是非常有必要的。

这份鸿蒙(HarmonyOS NEXT)文档包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习文档能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习文档

鸿蒙(HarmonyOS NEXT)5.0最新学习路线

在这里插入图片描述

有了路线图,怎么能没有学习文档呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习文档

《鸿蒙 (OpenHarmony)开发入门教学视频》

在这里插入图片描述

《鸿蒙生态应用开发V3.0白皮书》

在这里插入图片描述

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

在这里插入图片描述

《鸿蒙开发基础》

●ArkTS语言
●安装DevEco Studio
●运用你的第一个ArkTS应用
●ArkUI声明式UI开发
.……
在这里插入图片描述

《鸿蒙开发进阶》

●Stage模型入门
●网络管理
●数据管理
●电话服务
●分布式应用开发
●通知与窗口管理
●多媒体技术
●安全技能
●任务管理
●WebGL
●国际化开发
●应用测试
●DFX面向未来设计
●鸿蒙系统移植和裁剪定制
……
在这里插入图片描述

《鸿蒙进阶实战》

●ArkTS实践
●UIAbility应用
●网络案例
……
在这里插入图片描述

获取以上完整鸿蒙HarmonyOS学习文档,请点击→纯血版全套鸿蒙HarmonyOS学习文档

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值