代码覆盖率分析

FPGA怎么用Vivado做verilog代码覆盖率分析 第三步:做如下设置,其中cover是我们想要设置的覆盖率的名字,这个可以自己设置,./是覆盖率信息放置的位置,这两项都可以根据自己的使用来设置。sbct是设置想要收集哪些覆盖率信息,s是行覆盖率,b是分支覆盖率,c的条件覆盖率,t是翻转覆盖率。这样在我们仿真的时候就会进行覆盖率的收集了。然后就可以看到在对应的仿真目录下生成一个xsim.codeCov的目录,因为我设置的./所以生成的信息放在了这个目录下。在做仿真的时候往往会去做代码覆盖率和功能覆盖率的分析,来保证仿真是做的比较充分完备的。 阅读详情

通过分析来提高代码覆盖率
利用VectorCAST/CBA,用户可以标记出经过分析覆盖的代码。这样,高安全行业的开发工程师就能够通过覆盖率分析来提高测试所达到的覆盖率了,使覆盖率按照规定达到100%。

利用VectorCAST/CBA进行高安全的软件开发
高安全行业的开发工程师必须对测试过程中未执行到的代码进行分析,并将分析记录为需求的一部分,从而使结构覆盖率达到100%。
这种分析通常只用于一小部分难以甚至无法测试的代码库。利用VectorCAST/CBA,可以将这种分析与测试集成起来,用户只要通过一个视图就能看到所有的代码覆盖率。
 

通过VectorCAST/CBA编辑器,用户可以选择被覆盖的代码,并配上注释或要求。


VectorCAST/CBA何运作
VectorCAST/CBA会对那些未被测试覆盖的代码进行高亮处理,以方便用户对这些代码进行论证分析。VectorCAST/CBA的编辑器非常直观,用户可以根据覆盖率层级来为语句,分支结果或MC/DC配对添加分析。
VectorCAST/CBA可以将覆盖率分析数据与经测试得到的代码覆盖率结合起来,所以用户只要通过一个视图就能看到所有的代码覆盖率,这大大节约了记录代码覆盖率的时间和成本。用户可以为每个分析数据添加分析结果和链接,可将其连接到正式的需求。

将VectorCAST/CBA与静态分析工具结合起来使用
VectorCAST/CBA也可以与静态分析工具结合起来使用,这有助于集中精力测试最容易出现问题的代码部分。

静态工具会将代码部分按照“绿色”,“黄色”和“红色”进行分类。“绿色”表示没有静态错误的代码;“黄色”表示可能存在错误的代码,需要重新测试;“红色”表示肯定有错误的代码。这样,开发工程师可以集中精力修复“红色”代码,重点测试“黄色”代码。

 


将静态分析工具与VectorCAST/CBA集成起来,测试人员就可以集中精力测试黄色的代码部分

VectorCAST/CBA也支持这一工作流程,它可以导入静态分析数据并将“绿色”代码部分标记为经过分析覆盖的代码。

报告
团队可以根据集成的报告发布一个统一的视图,显示所有的覆盖率和经过分析的子集。
既可以在整合的覆盖率报告中看到VectorCAST/CBA数据,也可以在度量报告中看到该数据。
用户为多个VectorCAST/C++, VectorCAST/Ada, VectorCAST/Cover环境生成一个总结报告。

 


利用VectorCAST/CBA,用户可以在一个单独的报告 中轻松查看通过测试和分析获取的覆盖率度量指标。

【STK】手把手教你利用STK进行覆盖分析05-方位覆盖分析、覆盖网络检查工具和单对象覆盖分析 这一篇是我们STK覆盖模块的理论部分的最后一篇文章,之后会找尽可能多的论文来复现论文中关于STK覆盖模块的仿真的部分,到时候大家遇到不会的就可以结合前面的理论部分来看。 阅读详情

相关推荐

BullseyeCoverage:C++代码覆盖率分析工具详解

在现代软件开发过程中,代码覆盖率工具如BullseyeCoverage扮演着至关重要的角色。BullseyeCoverage不仅是一个高级的代码覆盖率分析工具,它还是提高软件质量,优化测试过程的关键工具。通过帮助开发者识别哪些代码被测试覆盖了,哪些还没有,它促进了测试的全面性和效率,进而保证了软件产品的质量和可靠性。## 1.1 BullseyeCoverage的含义BullseyeCoverage通过收集信息并计算测试过程中执行到的代码行数与总的代码行数的比例,提供了一个直观的覆盖率报告。

weixin_35370061的博客 1467

代码覆盖率指标有哪些?改进代码覆盖率的8个技巧

为确保代码覆盖的完整性,需要优化单元测试覆盖率和代码覆盖测试率,以便开发人员提高编写代码的速度和质量。有限状态机覆盖率测试是在代码覆盖率测试过程中测量的一个指标,用于测试在测试过程中有限状态机的状态和转换在多大程度上被执行。代码测试中的分支是代码中的一个点,在这个点上,程序的执行可能有一条或多条路径,特别是在if和for循环中。——代码覆盖率测试确保代码的所有组件都经过测试,并且代码的质量是可接受的并遵循设定的标准。总之,代码覆盖率测试是一个动态过程,它覆盖代码库的多个方面,确保软件的高质量和可靠性。

Testerhomee的博客 2898

PyQt5 使用QSqlDatabase连接Mysql数据库时Driver not loaded Driver not loaded

PyQt5 使用QSqlDatabase连接Mysql数据库时Driver not loaded Driver not loaded

睡觉不打呼噜的博客 1564

代码覆盖率分析(gcov)

为什么需要代码覆盖率分析?在发布代码的时候,我们常常会对其进行一系列的测试来协调软件的性能和功能,使他们和预计的相同。但是检验通常都是相当的困难,即使程序相当的简单。开发者常常会借助一些测试工具(test suite)来模拟或者重建执行脚本。如果测试程序组是彻底的,那么程序的各个功能都将被测试到并且都可以证明是可以工作的。但是怎样才算彻底呢?简单点说就是测试程序的每一条路径,验证每一个结果,执行每

SecularBird的专栏 4889

Ubuntu下全面解析硬盘健康:从基础检测到性能优化

本文详细介绍了在Ubuntu系统中如何全面监测硬盘健康状态。从安装smartmontools工具、解读SMART关键属性(如重新分配扇区计数、通电时间),到进行性能基准测试(使用dd和fio),最后根据检测结果提供针对性的优化与预警方案,帮助用户有效预防数据丢失并提升硬盘可靠性。

weixin_29223603的博客 287

ScanNet数据集下载全攻略:从申请到解析的保姆级教程(含常见问题解决)

本文提供了ScanNet数据集从申请授权到下载、解析的完整实战指南。针对这个大规模室内RGB-D数据集,详细介绍了官方申请流程、优化下载策略、数据验证方法,并重点解决了深度图解析等常见问题,帮助三维视觉研究者高效获取和使用这一宝贵资源。

5f4d3s2a1q的博客 618

代码覆盖率最佳实践

代码覆盖(Code coverage)是软件测试中的一种度量,描述源代码被测试的比例和程度,所得比例称为代码覆盖率。

datacreating的博客 1314

第 2 章:PassThrough 直通滤波

通过设置某个维度(如 x、y、z 或 rgb)的取值范围,仅保留该范围内的点,从而达到**点云裁剪(裁边)**或过滤异常值的目的。所有在该范围之外的点会被移除(可选是否保留);点云中包含背景、地面或传感器噪声,需要过滤;通过 z 轴过滤,只保留桌面上方的物体;多轴组合过滤(如同时过滤 x、y、z);可用于地面剔除、车载点云预处理等场景。不支持一次过滤多个字段,可多次调用;仅处理某一层或某一区域的点云数据。原始点云中包含地面、墙面、背景等;在区域裁剪、前景提取中广泛使用;设定一个轴(如z轴);

yumeiguo的博客 337

【谷歌好文】四种常见的代码覆盖率测试

什么是代码覆盖率 代码覆盖率是衡量测试代码测试了源代码百分比多少的指标。它可以帮助您识别可能缺乏适当测试的代码区域。

伤心的辣条 934

全志V3S嵌入式驱动开发(编译器升级到7.5)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 看过我们文章的朋友都知道,前面为了做v3s的驱动,对linux kernel进行了两次升级。第一次升级时从4.10.y升级到4.14.y,另外一次升级是从4.14.y升级到5.2.y。这中间最主要的原因,就是为了驱动适配的需要,更新的内核可以对硬件驱动有更好的支持,架构也更合理。 如果说内核升级尚且可以理解,那为什么要对编译器升级呢?这里面,最重要的一点就是语言的升

嵌入式-老费,一个分享专业嵌入式知识的blog 1166

【如何学习CAN总线测试】——AUTOSAR网络管理自动化测试(CAPL源码)

上一章介绍的是AUTOSAR网络管理如何测试、用例设计,对于不满足手工测试的同学,本章就介绍AUTOSAR网络管理自动化测试。

测试领域技术分享 6238

AI如何用JaCoCo提升代码覆盖率分析效率

在软件开发过程中,代码覆盖率是衡量测试质量的重要指标之一。传统的代码覆盖率分析工具虽然能提供基础数据,但往往需要人工解读和优化,效率较低。本文将介绍如何利用AI技术结合JaCoCo工具,实现智能化的代码覆盖率分析,帮助开发者更高效地提升测试质量。实际使用中发现,其集成的开发环境和可视化工具大大降低了技术门槛,让AI技术的应用变得更加简单高效。这种AI+测试覆盖率的创新组合,不仅提升了开发效率,更重要的是通过数据驱动的智能分析,帮助团队建立更完善的测试体系,最终实现软件质量的全面提升。

SilverfoxOwl19的博客 1000

多天线技术:5G波束成形&空间复用&空时编码

以提升信号的可靠性。然而,在20世纪90年代中期,研究者们惊讶地发现,多天线技术不仅仅提供分集增益,还可以开启一些单天线系统无法实现的新机遇。,我们可以将信道矩阵 ( H ) 视为一个满秩矩阵,则理论上可以建立min(𝑁𝑇,𝑁𝑅)个独立的数据流,形成一个。波束成形是5G物理层的核心技术,其本质是利用多个天线来增强特定方向上的信号,同时抑制干扰方向的信号。:物理波束成形 = 🔦 类似手电筒的聚焦光束,虚拟波束成形 = 🌊 类似水波的相干叠加。随着 5G 和 6G 时代的到来,多天线技术的作用愈发重

weixin_43199439的博客 1389

mold代码覆盖率:全面的代码覆盖率分析

在当今快速迭代的开发环境中,代码覆盖率分析已成为确保软件质量和可靠性的关键工具。对于像mold这样的高性能链接器项目,全面的代码覆盖率分析不仅能够帮助开发者识别未被测试的代码路径,还能指导测试策略的优化,确保这个关键基础设施组件的稳定性。 mold作为现代链接器的代表,其代码库高度优化且并行化,涉及复杂的算法和数据结构。通过系统的代码覆盖率分析,我们可以: - 识别测试盲点,确保所有关键功能都...

gitblog_00953的博客 736

【ARM AMBA5 CHI 2 -- CHI 链路层详细介绍 】

目前有六个版本的 CHI 协议,CHI-A 是 CHI 协议的第一个版本。它提供了一个传输层,具有减少拥塞的功能。新通道、CHI 术语和组件命名的定义;请求、监听过滤器和缓存状态转换的示例;事务排序、独占访问和分布式虚拟内存(DVM)操作的规则;CHI-B 问题扩展了 CHI-A,但不能直接向后兼容 CHI-A。更大的物理地址宽度;原子事务;DVM 的 VMID 扩展;通道字段、事务结构和可靠性、可用性和可维护性(RAS)特性的描述;

CodingCos的博客 2535

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用 gcov 对 binutils 进行代码覆盖率分析

文章目录使用 gcov 对 binutils工具包下的小工具进行代码覆盖率分析需要的工具gcov插桩以及lcov分析原过程gcovlcov对于binutils进行gcov插桩问题 使用 gcov 对 binutils工具包下的小工具进行代码覆盖率分析 因为科研需要,需要对binutils进行coverage分析,然后就接触到了gcov以及lcov,下面对binutils插桩时遇到的问题以及步骤进行总结。 需要的工具 需要的工具主要是两个,gcov以及lcov。gcov是gcc自带的,Linux下可以 $ g

weixin_41013492的博客 529

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ModelSim仿真代码覆盖率分析方法

本文仅仅简单介绍ModelSim仿真代码覆盖率分析的使用方法,适用于初学者进行学习。

windyqiao的博客 3333

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PHPUnit袖珍指南 第十章 代码覆盖率分析

 第十章 代码覆盖率分析你已经学会了怎么使用单元测试代码,但你怎么测试你的测试呢?你怎么发现没被测试的代码,换句话说,没被测试覆盖的代码?怎么衡量测试的完整性?所有这些问题的答案就是代码覆盖率分析。代码覆盖率分析告诉你当测试进行时,那些产品代码执行过了。 PHPUnit的代码覆盖率分析应用了Xdebug[6]扩展提供的语句覆盖率功能。 什么时语句覆盖率?举个例子来说,如果有一个方法

三默的专栏 - SaaS,敏捷开发方法,最佳实践 1万+

使用 Contest 分析测试用例的代码覆盖率

解决什么问题 问题的提出时这样的:对于测试人员来说,首先面临的问题就是无法度量测试用例的质量,如果测试工程师花费大量时间写的测试用例不能有效地覆盖重要的实现代码,那么可以表明这样的测试用例不是优良的。同时可以根据测试覆盖了的报表来分析为什么没有覆盖到重要的代码,接着需要进行改进测试用例的代码覆盖率达到满意的结果。代码覆盖率高低根据产品的不同而不同:70%,80% 甚至 100% 都是可能的...

zhenaikeke 459

pycobertura:一款代码覆盖率差异分析工具

pycobertura:一款代码覆盖率差异分析工具 1. 项目基础介绍 pycobertura 是一个开源项目,旨在提供一个针对 Cobertura 覆盖率报告的通用解析器。Cobertura 是一个用于计算 Java 程序代码覆盖率的工具。pycobertura 采用 Python 语言开发,通过解析 Cobertura 生成的报告,帮助开发者识别代码覆盖率的变化,并专注于他们所做的更改。 2....

gitblog_00541的博客 484

Maven JaCoCo进行代码覆盖率分析

通过在Maven项目中集成JaCoCo,开发者可以自动化地生成详细的代码覆盖率报告,并且可以设置覆盖率门槛以确保代码质量。JaCoCo不仅有助于提高代码的测试覆盖率,还促进了更高质量代码的编写。希望本文能帮助你成功地在Maven项目中集成JaCoCo,并有效地使用它来提升你的软件开发流程。

HaSaKing的博客 2355

Jacoco - 代码覆盖率报告分析

Jacoco - 代码覆盖率报告分析

5955
上一篇: 基于Web的质量和测试度量指标
下一篇: 敏捷开发中的测试
Trinitytec
博客等级 码龄11年 165粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值