1.uni-app实现定位功能
2.Linux系统下使用ctags查找源码的定位定位方法
3.Appium基础 — Chrome Inspect定位工具
4.利用好 git bisect 这把利器,帮助你快速定位疑难 bug
5.生产上的探测探测问题你不会用 sourcemap 定位吗?
6.四款源代码扫描工具
uni-app实现定位功能
uni-app实现定位功能的步骤如下:
首先,获取用户地理位置权限。源码源码使用uni-app内置的定位定位authorize方法,请求用户授权。探测探测在manifest.json文件中,源码源码盾给网源码点击"源码视图",定位定位在mp-weixin配置部分添加相关配置代码。探测探测
接下来,源码源码确保在app.json文件中也配置好权限请求。定位定位运行项目到微信开发者工具,探测探测再次配置相关代码。源码源码在authorize方法中,定位定位设置scope参数为userLocation,探测探测以请求获取位置信息。源码源码若用户拒绝授权,提示他们访问小程序设置页面。
在实际使用前,要检查是否已获取到定位权限。如果未授权,应适时提示用户并请求授权。传送宝石 源码
若需实现精准定位,可以借助腾讯地图。首先,注册腾讯地图开发者,获取key并下载qqmap-wx-jssdk.min.js。然后,在该文件末尾替换相关代码,并将SDK文件放入libs文件夹。创建腾讯地图对象后,调用逆地址解析方法获取位置信息。
对于常见问题,解决方案包括:
- 如果微信小程序定位出错,检查manifest.json的配置,确保已添加正确的权限代码,并在app.json中同步配置。然后,重新编译项目并启动,uni.getLocation方法应该能正常返回经纬度。此外,务必确认AppID已正确配置,支付封装源码可在manifest.json的"微信小程序配置"部分查看。
Linux系统下使用ctags查找源码的方法
太多的文件导致我们无法去定位一个函数的实现或者一个宏定义的位置。显然对于源码的阅读和个人的学习都是非常不利的。多么希望有一个软件能够输入命令就能够精确的定位函数的位置。是的,现在有这么一个工具:ctags,它需要和vim编辑器配合使用,让源码阅读可以更加轻松。什么是ctags?
ctags(Generate tag files for source code)是vim下方便代码阅读的工具。尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。并且VIM中已经默认安装了Ctags,它可以帮助程序员很容易地浏览源代码。
ctags更新地址:mitid] [较远的正确的commitid]
2. 测试相应的功能
3. git bisect good 标记正确
4. 直到出现问题则 标记错误 git bisect bad
5. 提示的commitid就是导致问题的那次提交
问题描述
我们以 Vue DevUI组件库的一个bug举例子
5dcb这一次commit,执行yarn build报错,报错信息如下:
我可以确定的是上一次发版本( dce4)是可以build成功的。
git bisect 简介
git bisect命令使用二分搜索算法来查找提交历史中的哪一次提交引入了错误。它几乎能让你闭着眼睛快速定位任何源码导致的问题,非常实用。
你只需要告诉这个命令一个包含该bug的坏commit ID和一个引入该bug之前的好commit ID,这个命令会用二分法在这两个提交之间选择一个中间的婚礼请柬 源码commit ID,切换到那个commit ID的代码,然后询问你这是好的commit ID还是坏的commit ID,你告诉它是好还是坏,然后它会不断缩小范围,直到找到那次引入bug的凶手commit ID。
这样我们就只需要分析那一次提交的代码,就能快速定位和解决这个bug(具体定位的时间取决于该次提交的代码量和你的经验),所以我们提交代码时一定要养成小批量提交的习惯,每次只提交一个小的独立功能,这样出问题了,定位起来会非常快。
接下来我就以 Vue DevUI之前出现过的一个bug为例,详细介绍下如何使用git bisect这把利器。
定位过程
其中5dcb这次是最近出现的有bug的提交,dce4这个是上一次发版本没问题的提交。
执行完启动bisect之后,马上就切到中间的一次提交啦,以下是打印结果:
可以看到已经切到以下提交:
执行命令:
构建成功,所以标记下good:
标记万good,马上又通过二分法,源码怎么读懂切到了一次新的提交:
再次执行build命令:
build失败了,出现了我们最早遇到的报错:
标记下bad,再一次切到中间的提交:
以此类推,不断地验证、标记、验证、标记...最终会提示我们那一次提交导致了这次的bug,提交者、提交时间、提交message等信息。
最终定位到出问题的commit:
github.com/DevCloudFE/v...
整个定位过程几乎是机械的操作,不需要了解项目源码,不需要了解最近谁提交了什么内容,只需要无脑地:验证、标记、验证、标记,最后git会告诉我们那一次提交出错。
这么香的工具,赶紧来试试吧!
问题分析
直到哪个commit出问题了,定位起来范围就小了很多。
如果平时提交代码又能很好地遵循小颗粒提交的话,bug呼之欲出。
这里必须表扬下我们DevUI的田主(Contributor)们,他们都养成了小颗粒提交的习惯,这次导致bug的提交c0c4cc1a,只提交了4个文件,涉及多行代码。
我们在其中搜索下document关键字,发现了两处,都在drawer-service.ts整个文件中:
一处是行的:
另一处是行的:
最终发现罪魁祸首就是行的代码!
破案!
此处@lnzhangsong我们的田主,有空麻烦修下这个bug。
生产上的问题你不会用 sourcemap 定位吗?
生产上的问题你不会用 sourcemap 定位吗?
sourcemap 是一个以.map 为后缀的文件,它以 json 形式存储了源代码打包转换后的位置信息。它的主要作用是实现运行时代码和开发时代码都能拥有相同准确的信息提示。常见的开发时代码提示如上图所示,而运行时代码提示如上图所示,运行时代码提示的信息不够详细准确。而 sourcemap 可以在不同的处理阶段中构建出运行时代码和开发时代码的映射关系,使得运行时代码也能够提供给我们详细而准确的信息,帮助我们在生产环境中快速定位到源代码中的位置。
要快速生成 sourcemap,前端构建工具有很多,这里列举两个常用的:vite 和 webpack。在 vite 中,只需要设置 build.sourcemap 的选项配置即可。在 webpack 中,则需要设置 devtool 的选项配置,值类型包括以下类型的组合。
要使得sourcemap 发挥作用,除了生成对应的映射规则外,还需要一个解析工具负责将源代码和 sourcemap 规则真正进行映射。通常,浏览器、异常监控系统(如:sentry)和手动映射都可以完成此任务。浏览器通常会默认启用sourcemap 映射功能。在 Sentry 监控系统中,接入、异常捕获和添加 sourcemap 的流程如下:
首先,在 Sentry 监控平台上注册/登录拥有自己的账号,然后可以构建一个对应的项目,项目创建好后会生成一个 dsn,在接入 Sentry 时需要传入。其次,在项目入口文件(main.js)中初始化接入 Sentry 即可。经过以上处理,Sentry 已经可以自动获取到错误信息,但没有接入 sourcemap 的错误信息在 Sentry 中也无法进行快速定位。因此,下一步就是需要给 Sentry 上传 sourcemap 相关的文件。
在 .map 文件中有 mappings 字段,它以 Base VLQ 编码形式存储了映射到源代码行、列等信息。使用 Base VLQ 编码可以减少文件体积,因为它是一种压缩数字内容的编码方式。每个分号中的第一串英文用来表示代码的第几行、第几列的绝对位置,后面的都是相对于之前的位置做加减法。
sourcemap 的生成、解析及应用在前端开发中是非常重要的,希望本文能帮助你更好地理解及应用 sourcemap。同时,编写文章的原则是首先保证自己有收获,其次,看看各位掘友对同一个问题都会有什么更好的方案。欢迎关注同名公众号《熊的猫》,文章会同步更新!
四款源代码扫描工具
1. Veracode
Veracode 是一款在全球范围内被广泛采用的静态代码分析工具。它以其3D可视化功能,能够清晰地展示安全漏洞的攻击路径,帮助开发者迅速定位和分析问题。这一特性极大地提高了软件的安全性。
2. Fortify SCA
Fortify SCA 是一款专注于静态代码分析的强大工具,支持多种编程语言和主流框架。它的定制化能力可以满足不同项目的需求,确保代码质量与企业标准相符。
3. Checkmarx
Checkmarx 以其全面的扫描管理能力而闻名。它的服务独立性使得无论是团队协作、自动化任务还是云服务,都能无缝对接。这不仅降低了使用成本,还不会影响开发进度。
4. 端玛DMSCA
端玛DMSCA 是一款企业级解决方案,它的操作系统和编译器都是独立的。它提供的扫描具有低误报率和高准确性,几乎可以忽略不计的误报率节省了大量的审计时间和成本。此外,它还能够深入业务逻辑和架构,动态地查找潜在风险。