【HarmonyOS实战开发】鸿蒙JS崩溃分析
当未处理的JS异常导致应用意外退出时,应用会生成对应的JS崩溃日志文件,开发者可通过错误日志查看引起崩溃的代码位置及分析应用崩溃的原因。本文将分别介绍JS崩溃分析思路以及典型分析案例。
一、日志信息
以下是崩溃日志信息中对应字段解释。
`Device info:emulator // 设备信息
Build info:emulator 5.0.0.31(SP37DEVC00E31R4P11log) // 版本信息
Fingerprint:983250ec758a62f9a6c4049e5d22210791fa49c6c91c321e619425045de615b1
Module name:com.shijing.zijin // 模块名
Version:1.0.0 // 版本名称
VersionCode:1000000 // 版本号
PreInstalled:No
Foreground:Yes // 前后台
Pid:9827 // 进程id
Uid:20020036
Reason:SyntaxError // 异常原因
Error name:SyntaxError // 异常名称
Error message:Unexpected Text in JSON // 异常信息
Cannot get SourceMap info, dump raw stack: // 应用安装包为release包安装时不包含sourcemap文件,JS栈通过sourcemap行列号解析会失败
SourceCode:JSON.parse(''); // 异常代码位置^
Stacktrace:at anonymous (entry/src/main/ets/pages/Index.ets:18:13) // 异常代码调用栈
二、异常类型
JS异常根据不同的异常场景,在 Reason 字段进行了分类,分为Error、TypeError、SyntaxError、RangeError等错误类型。
- 自定义 Error 类:Error 是最基本的错误类型,其他的错误类型都继承自该类型。Error 对象主要有两个重要属性 message 和 name 分别表示错误信息和错误名称。程序运行过程中抛出的异常一般都有具体的类型,Error 类型一般都是开发人员自己抛出的异常。
- TypeError(类型错误)类:运行时最常见的异常,表示变量或参数不是预期类型。
- SyntaxError(语法错误)类:语法错误也称为解析错误。语法错误在任何编程语言中都是最常见的错误类型,表示不符合编程语言的语法规范。
- RangeError(边界错误)类:表示超出有效范围时发生的异常,主要的有以下几种情况: 数组长度为负数或超长 数字类型的方法参数超出预定义范围 函数堆栈调用超过最大值
- ReferenceError —— 引用错误:引用一个不存在的变量时发生的错误,每当我们创建一个变量时,变量名称都会写入一个变量存储中心中,这个变量存储中心就像键值存储一样,每当我们引用变量时,它都去存储中找到 key并提取并返回 value,如果我们要找的变量不在存储中,就会抛出 ReferenceError。
- URI Error —— URL错误:在调用 URI 相关的方法中 URL 无效时抛出的异常,主要包括 encodeURI()、decodeURI()、encodeURIComponent()、decodeURIComponent()、escape() 和 unescape() 。
三、堆栈
StackTrace字段存放的是JS异常的调用栈信息,StackTrace的显示分为以下几种场景。
1、JS调用栈可直接通过超链接跳转到对应错误代码行,栈顶即为问题第一现场,如下样例所示
`Device info:emulator
Build info:emulator 5.0.0.31(SP37DEVC00E31R4P11log)
Fingerprint:983250ec758a62f9a6c4049e5d22210791fa49c6c91c321e619425045de615b1
Module name:com.shijing.zijin
Version:1.0.0
VersionCode:1000000
PreInstalled:No
Foreground:Yes
Pid:9827
Uid:20020036
Reason:SyntaxError
Error name:SyntaxError
Error message:Unexpected Text in JSON
SourceCode:JSON.parse('');^
Stacktrace:at anonymous (entry/src/main/ets/pages/Index.ets:18:13)
2、异常代码调用栈包含 SourceMap is not initialized yet ,表示因SourceMap转换非常耗时,改为通过异步线程去进行初始化,导致会出现SourceMap没初始化完成就有异常产生的情况。针对这种情况增加这行日志来提示开发者。eTS栈对应编译后产物中代码行号,可通过超链接跳转到对应错误代码行。如下样例所示。
`Device info:xxx
Build info:xxx-xxx x.x.x.xxx(xxxx)
Fingerprint:377ef8529301363f373ce837d0bf83aacfc46112502143237e2f4026e86a0510
Module name:com.xxx.xxx
Version:1.0.0
Versioncode:1000000
PreInstalled:No
Foreground:Yes
Pid:6042
Uid:20020145
Reason:Error
Error name:Error
Error message:JSERROR
Sourcecode:throw new Error("JSERROR");^
Stacktrace:
SourceMap is not initialized yet
at anonymous (entry/src/main/ets/pages/Index.ets:49:49)
3、异常代码调用栈中打印native栈,栈顶一般为libark_jsruntime.so动态库,这是因为JS异常最后都会经过虚拟机抛出。从崩溃栈从上往下找,libace_napi.z.so的上一帧一般是抛出异常的现场。如下样例所示。
`Device info:xxx
Build info:xxx-xxx x.x.x.xxx(xxxx)
Fingerprint:89f2b64b24d642b0fc64e3a7cf68ca39fecaa580ff5736bb9d6706ea4cdf2c93
Module name:com.xxx.xxx
Version:1.0.0
VersionCode:1000000
PreInstalled:No
Foreground:No
Pid:14325
Uid:20020145
Reason:ReferenceError
Error name:ReferenceError
Error message:Cannot find module 'com.xxx.xxx/entry/EntryAbility' , which is application Entry Point
Stacktrace:
SourceMap is not initialized yet
#01 pc 000000000028ba3b /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#02 pc 00000000001452ff /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#03 pC 0000000000144c9f /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#04 pc 00000000001c617b /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#05 pc 00000000004c3cb7 /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#06 pc 00000000004c045f /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#07 pc 000000000038034f /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#08 pc 00000000004b2d9b /system/libó4/platformsdk/libark_jsruntime.so(bf6ea8e474ac3e417991f101e062fa90)
#09 pc 0000000000037e7f /system/libó4/platformsdk/libace_napi.z.so(10ceafd39b5354314d2fe3059b8f9e4f)
#10 pc 00000000000484cf /system/lib64/platformsdk/libruntime.z.so(3f6305a3843fae1de148a06eec4bd014) <- 异常抛出位置
#11 pc 000000000004fce7 /system/libó4/platformsdk/libruntime.z.so(3f6305a3843fae1de148a06eec4bd014)
#12 pc 000000000004e9fb /system/libó4/platformsdk/libruntime.z.so(3f6305a3843fae1de148a06eec4bd014)
#13 pc 000000000004eb7b /system/libó4/platformsdk/libruntime.z.so(3f6305a3843fae1de148a06eec4bd014)
#14 pc 000000000004f5c7 /system/libó4/platformsdk/libruntime.z.so(3f6305a3843fae1de148a06eec4bd014)
#15 pc 00000000000303cf /system/lib64/platformsdk/libuiabilitykit_native.z.so(3203F4CCe84a43b519d0a731dfOdb1a3)
4、如出现Cannot get Source Map info, dump raw stack信息,表示该应用为release包安装,JS栈转换eTS行列号失败,在DevEco Studio中点击链接会跳转到不正确的代码位置或不存在的代码行位置。如下样例所示。
`Device info:xxx
Build info:xxx-xxx x.x.x.xxx(xxxx)
Fingerprint:a370fceb59011d96e41e97bda139b1851c911012ab8c386d1a2d63986d6d226d
Module name:com.xxx.xxx
Version:1.0.0
Versioncode:1000000
PreInstalled:No
Foreground:Yes
Pid:39185
Uid:20020145
Reason:Error
Error name:Error
Error message:JSERROR
Stacktrace:
Cannot get SourceMap info, dump raw stack:at anonymous (entry/src/main/ets/paqes/Index.ts:49:49)
Release应用都会混淆代码,去除其中的debug信息。因此无法直接通过Release应用的堆栈信息定位到源码的具体文件和行位置。对于这种情况,可以使用DevEco Studio还原堆栈,也可以通过hstack命令还原堆栈。
四、release模式编译产物
在进行堆栈还原之前,我们需要拿到一些文件,这些文件只在构建release包才会有,构建debug包不会有这些文件。
sourcemap文件
release模式编译产物,文件位置:ProjectName/ModuleName/build/default/cache/default/default@CompileArkTS/esmodule/release/sourceMaps.map
so
带调试信息的so数据,产物位置:ProjectName/ModuleName/build/default/intermediates/libs libs:带debug信息的so。 stripped_native_libs:移除调试信息等冗余数据后的so。
nameCache
反混淆映射表,release模式编译产物,产物位置:ProjectName/ModuleName/build/default/cache/default/default@CompileArkTS/esmodule/release/obfuscation
四、DevEco Studio还原堆栈
DevEco Studio提供了Release应用堆栈解析功能,开发者可以利用构建产物中包含Debug信息的文件(so文件、sourcemap文件、nameCache文件等),对Release应用中C++堆栈、ArkTS堆栈以及ArkTS堆栈中混淆的方法名和文件名进行还原。
1、单击菜单栏Code > Analyze Stack Trace,或在FaultLog页面异常堆栈信息处右键选择Analyze Stack Trace。
2、在弹出的Analyze Stack Trace对话框中,粘贴Release应用的异常堆栈信息。
3、如果当前工程为堆栈所在应用对应的工程,且存在Release构建产物,点击Start Analyze即可进行解析。如果当前工程不是堆栈所在应用对应的工程,则需要配置应用对应构建产物:勾选Unscramble stack trace, 在下方的文件选择框中,分别添加应用对应的sourcemap文件、so文件以及nameCache文件,点击Start Analyze进行转换。DevEco Studio将解析后的堆栈信息显示在右侧的输出框中。
在构建Release应用时,so文件默认不包含符号表信息,还原so的时候,需要使用包含符号表信息的so。在构建Release应用时生成包含符号表的so文件,需要在工程的模块级build-profile.json5文件的buildOption属性中,配置如下信息:
`"buildOption": {"externalNativeOptions": {"arguments": "-DCMAKE_BUILD_TYPE=RelWithDebInfo"}
}
五、hstack还原堆栈
hstack依赖Node环境, 需要将Node.js配置到环境变量中,还需要将SDK中的nativellvmin目录配置到环境变量中。 使用如下命令,-i指定崩溃文件所在目录,-o指定输出目录,-s指定sourcemap文件所在目录,–so指定so文件所在目录,-n指定nameCache文件所在目录。解析完成后,输出目录下会生成对应的解析文件,文件以原始crash文件名加“_”前缀进行命名。
`hstack -i crashDir -o outputDir -s sourceMapDir --so soDir -n nameCacheDir
需要注意的是,对于so文件,一定要使用包含符号表的so。在构建Release应用时,so文件是默认不包含符号表信息的,在构建Release应用时生成包含符号表的so文件,需要在工程的模块级build-profile.json5文件的buildOption属性中,配置如下信息:
`"buildOption": {"externalNativeOptions": {"arguments": "-DCMAKE_BUILD_TYPE=RelWithDebInfo"}
}
六、JS崩溃案例解析
Java有个折磨人的空指针异常,JS同样有个类似空指针的异常,那就是undefined,undefined在错误日志中多表现为如下:
`Error name:TypeError
Error message:Cannot read property xxx of undefined
解决方式也简单,增加保护性判断,判断对象是否为undefined,或者在访问前增加 ‘’ 操作符。
写在最后
●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我两个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing??,不定期分享原创知识。
相关文章:
【HarmonyOS实战开发】鸿蒙JS崩溃分析
当未处理的JS异常导致应用意外退出时,应用会生成对应的JS崩溃日志文件,开发者可通过错误日志查看引起崩溃的代码位置及分析应用崩溃的原因。本文将分别介绍JS崩溃分析思路以及典型分析案例。 一、日志信息 以下是崩溃日志信息中对应字段解释。 Device…...
【Vue3】前端使用 FFmpeg.wasm 完成用户视频录制,并对视频进行压缩处理
强烈推荐这篇博客!非常全面的一篇文章,本文是对该博客的简要概括和补充,在不同技术栈中提供一种可行思路,可先阅读该篇文章再阅读本篇: FFmpeg——在Vue项目中使用FFmpeg(安装、配置、使用、SharedArrayBu…...
与 Cursor AI 对话编程:2小时开发报修维修微信小程序
本文记录了如何通过与 Cursor AI 对话,全程不写一行代码的情况下,完成一个完整的报修小程序。整个过程展示了 AI 如何帮助我们: 生成代码 、解决问题、优化实现、完善细节。 先看一下效果图: 一、项目配置 首先我是这样和 AI 对…...
【机器学习】机器学习的基本分类-无监督学习-主成分分析(PCA:Principal Component Analysis)
主成分分析(Principal Component Analysis, PCA) 主成分分析(PCA)是一种常用的降维技术,用于将高维数据投影到低维空间,同时尽可能保留原数据的主要信息(方差)。 1. PCA 的核心思想…...
工频隔离与高频隔离的优劣对比
工频与高频隔离的优劣以及选择方法的详细介绍: 工频隔离 优点: 隔离效果好:能有效过滤电网上的谐波干扰和负载特性产生的大电流冲击,为负载提供更可靠的保护,适用于对电源稳定性和可靠性要求高的工业、医疗、交通等领…...
前端传入Grule,后端保存到 .grl 文件中
前端传入Grule,后端保存到 .grl 文件中 通过简单的输入框,将Grule的部分拆解成 规则名称 规则描述 规则优先级 规则条件 规则逻辑Grule关键字 when Then 模拟了 if 判断的条件和逻辑部分 类似于 shell 和 ruby 之类的脚本语言,有 then 关键字…...
SpringBoot【十】mybatis之xml映射文件>、<=等特殊符号写法!
一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 在利用mybatis进行开发的时候,编写sql时可能少不了>、<等比较符号,但是在mapper映射文件中直接使用是不行的,会报错࿰…...
使用Excel 对S型曲线加减速算法进行仿真
项目场景: 项目场景:代码中写了S型加减速算法,相查看生成的加减速数组,直观的展示出来,USB通信一次64字节,对于我几个个32位的频率值不太方便,于是采用Excel进行仿真。 代码中如何生成S加减速曲…...
Java面试宝典 1.13~1.31【2020.5 Beta版】
Java面试宝典 1.13~1.31【2020.5 Beta版】 <a name"14cb060b"></a> 1.Java基础 <a name"22b8b366"></a> 1.13 静态变量与实例变量的区别? 静态变量实例变量定义使用static关键字声明的实例变量在类中声明,但…...
调度系统:使用 Airflow 对 Couchbase 执行 SQL 调度时的潜在问题
使用 Airflow 对 Couchbase 执行 SQL 调度时,通常情况下不会直接遇到与 Couchbase 分布式特性相关的异常,但在某些特定情境下,可能会出现一些与分布式环境、调度和数据一致性相关的潜在问题。以下是一些可能会遇到的问题和建议的解决方案&…...
过载与简单:理解感知
通常情况下,最好的设计是使用最少设计技巧的设计。这是为什么?这一切都是关于人类大脑是如何工作的,它决定了观众对媒体的反应、感受情绪和做出决定。 注意。我们被海量的信息轰炸。不间断地处理所有这些信号会降低我们大脑的注意力。根据微…...
前端加密的方式汇总
目录 一、Base64编码 二、哈希算法 三、对称加密(AES/DES) 四、非对称加密(RSA) 五、加盐 六、Web Cryptography API? 七、总结 随着信息和数据安全重要性的日益凸显,如何保证信息数据在传输的过程中的安全成为开发者重点关注的内容。前端加密通常是指在浏览…...
git新建远程分支后,无法切换
git remote # 列出所有远程主机 git remote update origin --prune # 更新远程主机origin 整理分支 git branch -r # 列出远程分支 git branch -vv # 查看本地分支和远程分支对应关系 git checkout -b gpf origin/gpf # 新建本地分支gpf与远程gpf分支相关…...
HarmonyOS 线性容器List 常用的几个方法
List底层通过单向链表实现,每个节点有一个指向后一个元素的引用。当需要查询元素时,必须从头遍历,插入、删除效率高,查询效率低。List允许元素为null。 List和LinkedList相比,LinkedList是双向链表,可以快速…...
【21天学习AI底层概念】day2 机器学习基础
按照由浅入深的顺序,下一步学习 机器学习(Machine Learning) 的基础是最自然的选择。机器学习是人工智能的核心技术之一,很多AI系统都依赖它。以下是学习路线建议: 第二步:机器学习基础 学习目标ÿ…...
简单的Java小项目
学生选课系统 在控制台输入输出信息: 在eclipse上面的超级简单文件结构: Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…...
TDengine Flink集成
Flink 集成 TDengine 主要涉及在 Flink 项目中配置与 TDengine 的连接,实现数据的读取和写入。以下是一个详细的指南,介绍如何在 Flink 中集成 TDengine: 一、准备工作 安装并启动 Flink: 下载并解压 Flink 安装包。启动 Flink …...
数据结构和算法-05堆和优先队列-01
堆结构(heap) 生活中我们遇见的数据结构-堆: 查看电影口碑排名第一的电影。 堆的概念 [堆(heap)] 是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个结点的值总是不大于或不小于其父结点的…...
PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)
分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者,我总喜欢翻看各种项目附带的论文,虽然大多时候是瞎研究,但却乐在其中。该项目能够完美保留公式、图表、目录和注释,对于需要阅读外文文献的…...
爬虫基础与实践
爬虫技术基础与实践 在当今数字化的时代,数据成为了宝贵的资源。爬虫技术作为获取数据的重要手段,受到了广泛的关注和应用。本文将介绍爬虫的基本概念、工作原理以及一些常用的技术和工具。 一、爬虫的基本概念 爬虫,也称为网络蜘蛛或网络机器…...
uni-app Android平台上架要求的隐私政策提示配置方法【跨端开发系列】
文章目录 前言📖一、前言二、DCloud 数据采集说明三、配置方式3.1 HBuilderX3.2.1及以上版本配置方式3.2 HBuilderX3.2.0及以下版本配置方法3.3 模板提示框3.4 无提示框 四、离线打包配置方式五、模板提示框六、二次确认提示框七、国际化八、隐私协议内容需要注意的…...
在Ubuntu上使用docker compose安装N卡GPU的Ollama服务
在现代计算环境中,利用 GPU 进行计算加速变得越来越重要。下面将讲解如何在Ubuntu上使用docker compose安装N卡GPU的Ollama服务。 1、安装 NVIDIA 容器工具 首先,需要确保你的系统已经安装了 NVIDIA 容器工具 nvidia-container-toolkit。这是让 Docker 容器访问 GPU 的关键…...
中文分词学习
1.安装 jieba 库 !pip install jieba jieba 库是用于中文分词的工具,它通过精确的分词算法来处理文本。通过分词可以将中文句子拆分成单独的词语,这对于自然语言处理任务非常重要,比如文本分类、情感分析、关键词提取。 2.中文文本分词处理…...
Seata 分布式事务
1. 分布式事务介绍 传统单体应用场景下,系统的数据保存在一个数据库实例中,通常场景的关系数据库都能自动提供事务保证,并且这种情况下的事务称为本地事务,能保证原子性、一致性、隔离性、持久性(ACID 特性)…...
Burp入门(10)-IP伪造插件
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址:IP伪造和爬虫审计_哔哩哔哩_bilibili 本文详细介绍IP伪造插件Burp Fake IP使用。 一、插件安装 打开Burp Suite。进入扩展标签页。点击添加&…...
idea连接SQL Server数据库_idea连接sqlserver数据库
4.设置密码(这一步可以在安装数据库时就可以完成),如果觉得用户名有问题,也可以修改用户名 5.查看SQL Server端口号(默认端口:1433),选择SQL Server2019配置管理器 6.打开SQL Server…...
SQL汇总数据:聚集函数
我们经常需要汇总数据而无需实际检索出这些数据,为此SQL提供了专门的函数。使用这些函数,SQL查询能够高效地检索数据,以便进行分析和报表生成。这类检索的例子包括: 确定表中行数(或者满足某个条件或包含某个特定值的…...
Next.js系统性教学:服务器操作与数据变更
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 什么是服务器操作和数据变更? 1.1 服务器操作 (Server Actions) 1.2 数据变更 (Mutations) 2. Next.js中的服务器操作与数据变更 2.1 引入:…...
Python Selenium 各浏览器驱动下载与配置使用(详细流程)
大家好啊!我是NiJiMingCheng 这是我的博客:NiJiMingCheng 这节课我们来学习安装selenium和对应的各个浏览器驱动,个人比较喜欢使用谷歌浏览器驱动,所以接下来以谷歌浏览器来为大家做示例!!! Sel…...
python flask 框架模块介绍
Flask 是一个轻量级、可扩展的 Python Web 框架,特别适合构建小型和中型应用程序。它的设计哲学是简单、灵活,允许开发者根据需要选择或创建功能模块。以下是 Flask 框架的核心模块和其功能的详细讲解: 1. Flask 核心模块 (1) flask.Flask 类…...
手把手搭建基于.NET 8.0的Web API项目
1.背景 工作以后,大部分时间都是在做基于业务的CRUD工作,软件产品或者项目的框架基本都早就搭建好了,程序员只需要在框架内去填格子打代码就行了。于是,我抽了时间来搭建个简单的三层架构模式的web api项目,技术点大概…...
SQL注入基础入门篇 注入思路及常见的SQL注入类型总结
目录 前言一、了解mysql数据库1、了解sql增删改查2、了解sql查询 二、sql注入基础三、学习sql注入漏洞1、union注入1、判断数字型注入还是字符型型注入:2、判断闭合方式(字符型注入):3、判断回显位4、查询库名,表名&am…...
部门操作和日志
PostMapping("/depts") public Result add(RequestBody Dept dept){System.out.println("添加部门: " dept);deptService.add(dept);return Result.success(); }Override public void add(Dept dept) {dept.setCreateTime(LocalDateTime.now());dept.setU…...
如何使用WinCC DataMonitor基于Web发布浏览Excel报表文档
本文介绍使用 WinCC DataMonitor 的 "Excel Workbooks" 功能,通过 Excel 表格显示 WinCC 项目的过程值、归档变量值和报警归档消息。并可以通过 Web 发布浏览访问数据 1.WinCC DataMonitor是什么 ? DataMonitor 是 SIMATIC WinCC 工厂智能中…...
禁用SAP Hana错误密码锁定用户功能
背景 公司项目适配多种数据库其中包含SAP Hana,由于有同事的数据库连接工具保存了某个在用的数据库的旧密码,导致时不时会被锁用户。通过查询官方文档已解决,这里统一记录一下。 禁用密码锁定方法 以下按系统管理员和普通用户的解法分别列…...
uni-app 个人课程表页面
uni-app 个人课程表页面 插件参考地址 大部分代码都是参考了上述代码,只对代码做出了优化 1. 页面模板 在 schedule.vue 文件中,编写页面结构: <template><view><u-navbar title"个人中心"><view class&q…...
实现盘盈单自动化处理:吉客云与金蝶云星空数据对接
盘盈单103v2对接其他入库:吉客云数据集成到金蝶云星空 在企业信息化管理中,数据的高效流转和准确性至关重要。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将吉客云的数据无缝对接到金蝶云星空,实现盘盈单…...
如何查看内网设备访问互联网时的出口 IP 地址?
在企业VPC中我们通常是一个机房公用一个公网IP,也就是所有的设备共用同一个出口IP。 那么如何查看如何查看内网设备访问互联网时的出口 IP 地址呢? 要查看一台 Linux 内网设备访问互联网时的出口 IP 地址,可以使用以下几种方法:…...
JavaCV之FFmpegFrameFilter视频转灰度
1、代码 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.*;public class FFmpegFrameFilterVideoExample {SneakyThrowspublic static void main(String[] args) {// 输入视频文件路径String inputVideoPath "f:/2222.mp4&qu…...
MySQL | 尚硅谷 | 第16章_变量、流程控制与游标
MySQL笔记:第16章_变量、流程控制与游标 文章目录 MySQL笔记:第16章_变量、流程控制与游标第16章_变量、流程控制与游标 1. 变量1.1 系统变量1.1.1 系统变量分类1.1.2 查看系统变量 1.2 用户变量1.2.1 用户变量分类1.2.2 会话用户变量 1.2.3 局部变量1.2…...
css矩形样式,两边圆形
废话不多说,代码如下,直接拷贝即可使用: index.vue文件 <template><view class"wrap"><view class"tabs"><view class"tab active"><view class"name">标签</view…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(7)
1.问题描述: 推送通知到手机,怎么配置拉起应用指定的页面? 解决方案: 1、如果点击通知栏打开默认Ability的话, actionType可以设置为0, 同时可以在.clickAction.data中,指定待跳转的page页面…...
孚盟云 MailAjax.ashx SQL注入漏洞复现
0x01 产品简介 上海孚盟软件有限公司是一家外贸SaaS服务提供商,也是专业的外贸行业解决方案专业提供商。 全新的孚盟云产品,让用户可以用云模式实现信息化管理,让用户的异地办公更加流畅,大大降低中小企业在信息化上成本,用最小的投入享受大型企业级别的信息化服务,主要…...
Windows平台Unity3D下RTMP播放器低延迟设计探讨
技术背景 好多开发者希望我们分享下大牛直播SDK是如何在Unity下实现低延迟的RTMP播放的,以下是一些降低 Unity 中 RTMP 播放器延迟的方法: 一、选择合适的播放插件或工具 评估和选用专业的流媒体插件 市场上有一些专门为 Unity 设计的流媒体插件&…...
数据结构---队列(Queue)
1. 简介 队列(Queue)是一种常用的数据结构,它遵循先进先出(FIFO,First In First Out)的原则。这意味着第一个进入队列的元素将是第一个被移除的元素。队列在计算机科学中有着广泛的应用,比如任…...
软件测试丨Appium 源码分析与定制
在本文中,我们将深入Appium的源码,探索它的底层架构、定制化使用方法和给软件测试带来的优势。我们将详细介绍这些技术如何解决实际问题,并与大家分享一些实用的案例,以帮助读者更好地理解和应用这一技术。 Appium简介 什么是App…...
selenium学习:等待方式
隐式等待 1.针对查找元素设置最大的超时时间 2.可以全局性的设置 3.不满足时,提示no such element driver.implicitly_wait(5) #对查找元素最大的超时时间,如果超过最大等待时间后,没有找到元素,则会报错:no such #e…...
京准电钟分享:医院网络内NTP时间同步服务器作用是什么?
京准电钟分享:医院网络内NTP时间同步服务器作用是什么? 京准电钟分享:医院网络内NTP时间同步服务器作用是什么? 时间同步技术必定将是整个大数据处理系统的重要支撑和保障。时间同步技术使数据产生与处理系统的所有节点具有全局…...
Excel 合并工具 将文件复制到目标工作表中与操作日志记录
指定文件夹中读取符合条件的 Excel 文件,将其中的数据按照一定规则复制到目标工作表中,并进行相关的日志记录和工作簿保存操作。 先看下 excel 的结构 合并的结果 log 记录 vba 代码 Sub DeltaCheck()作者和创建时间的注释 定义工作表变量Dim ws As Wor…...
Linux 内核源码
Linux 内核的源代码可以在以下位置获取: • 官方网站:https://www.kernel.org/是Linux内核源代码的官方获取渠道,该网站提供了各种版本的内核源代码压缩包,用户可按需选择版本下载. • Git 仓库:使用Git工具可克隆Li…...