青春时代是一个短暂的美梦,当你醒来时,它早已消失得无影无踪了。
 
今日:0    总帖:94
admin
5778
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/E51lKQOojsvhHvACIyXwhw 作者:黄文佳常见错误的分类对于用户在访问页面时发生的错误,主要包括以下几个类型:1、js运行时错误JavaScript代码在用户浏览器中执行时,由于一些边界情况、本地环境的不可控等因素,可能会存在js运行时错误。而依赖客户端的某些方法,由于兼容性或者网络等问题,也有概率会出现运行时错误。e.g: 下图是当使用了未定义的变量"foo",导致产生js运行时错误时的上报数据:2、资源加载错误这里的静态资源包括js、css以及image等。现在的web项目,往往依赖了大量的静态资源,而且一般也会有cdn存在。如果某个节点出现问题导致某个静态资源无法访问,就需要能够捕获这种异常并进行上报,方便第一时间解决问题。e.g: 下图是图片资源不存在时的上报数据:3、未处理的promise错误未使用catch捕获的promise错误,往往都会存在比较大的风险。而编码时有可能覆盖的不够全面,因此有必要监控未处理的promise错误并进行上报。e.g: 下图是promise请求接口发生错误后,未进行catch时的上报数据:4、异步请求错误(fetch与xhr)异步错误的捕获分为两个部分:一个是传统的XMLHttpRequest,另一个是使用fetch api。像axios和jQuery等库就是在xhr上的封装,而有些情况也可能会使用原生的fetch,因此对这两种情况都要进行捕获。e.g: 下图是xhr请求接口返回400时捕获后的上报数据:各个类型错误的捕获方式1、window.onerror与window.addEventListener('error')捕获js运行时错误使用window.onerror和window.addEventListener('error')都能捕获,但是window.onerror含有详细的error堆栈信息,存在error.stack中,所以我们选择使用onerror的方式对js运行时错误进行捕获。window.onerror = function (msg, url, lineNo, columnNo, error) { // 处理错误信息 } // demo msg: Uncaught TypeError: Uncaught ReferenceError: a is not defined error.statck: TypeError: ReferenceError: a is not defined at http://xxxx.js:1:13 window.addEventListener('error', event => (){ // 处理错误信息 }, false); // true代表在捕获阶段调用,false代表在冒泡阶段捕获。使用true或false都可以,默认为false2、资源加载错误使用addEventListener去监听error事件捕获实现原理:当一项资源(如<img>或<script>)加载失败,加载资源的元素会触发一个Event接口的error事件,并执行该元素上的onerror()处理函数。这些error事件不会向上冒泡到window,不过能被window.addEventListener在捕获阶段捕获。但这里需要注意,由于上面提到了addEventListener也能够捕获js错误,因此需要过滤避免重复上报,判断为资源错误的时候才进行上报。window.addEventListener('error', event => (){ // 过滤js error let target = event.target || event.srcElement; let isElementTarget = target instanceof HTMLScriptElement || target instanceof HTMLLinkElement || target instanceof HTMLImageElement; if (!isElementTarget) return false; // 上报资源地址 let url = target.src || target.href; console.log(url); }, true);3、未处理的promise错误处理方式实现原理:当promise被reject并且错误信息没有被处理的时候,会抛出一个unhandledrejection。这个错误不会被window.onerror以及window.addEventListener('error')捕获,但是有专门的window.addEventListener('unhandledrejection')方法进行捕获处理。window.addEventListener('rejectionhandled', event => { // 错误的详细信息在reason字段 // demo:settimeout error console.log(event.reason); });4、fetch与xhr错误的捕获对于fetch和xhr,我们需要通过改写它们的原生方法,在触发错误时进行自动化的捕获和上报。改写fetch方法:// fetch的处理 function _errorFetchInit () { if(!window.fetch) return; let _oldFetch = window.fetch; window.fetch = function () { return _oldFetch.apply(this, arguments) .then(res => { if (!res.ok) { // 当status不为2XX的时候,上报错误 } return res; }) // 当fetch方法错误时上报 .catch(error => { // error.message, // error.stack // 抛出错误并且上报 throw error; }) } }对于XMLHttpRequest的重写:xhr改写 // xhr的处理 function _errorAjaxInit () { let protocol = window.location.protocol; if (protocol === 'file:') return; // 处理XMLHttpRequest if (!window.XMLHttpRequest) { return; } let xmlhttp = window.XMLHttpRequest; // 保存原生send方法 let _oldSend = xmlhttp.prototype.send; let _handleEvent = function (event) { try { if (event && event.currentTarget && event.currentTarget.status !== 200) { // event.currentTarget 即为构建的xhr实例 // event.currentTarget.response // event.currentTarget.responseURL || event.currentTarget.ajaxUrl // event.currentTarget.status // event.currentTarget.statusText }); } } catch (e) {va console.log('Tool\'s error: ' + e); } } xmlhttp.prototype.send = function () { this.addEventListener('error', _handleEvent); // 失败 this.addEventListener('load', _handleEvent); // 完成 this.addEventListener('abort', _handleEvent); // 取消 return _oldSend.apply(this, arguments); } }关于responseURL 的说明需要特别注意的是,当请求完全无法执行的时候,XMLHttpRequest会收到status=0 和 statusText=null的返回,此时responseURL也为空string。另外在安卓4.4及以下版本的webview中,xhr对象也不存在responseURL属性。因此我们需要额外的改写xhr的open方法,将传入的url记录下来,方便上报时带上。var _oldOpen = xmlhttp.prototype.open; // 重写open方法,记录请求的url xmlhttp.prototype.open = function (method, url) { _oldOpen.apply(this, arguments); this.ajaxUrl = url; };其他问题1、其他框架,例如vue项目的错误捕获vue内部发生的错误会被Vue拦截,因此vue提供方法给我们处理vue组件内部发生的错误。Vue.config.errorHandler = function (err, vm, info) {  // handle error  // `info` 是 Vue 特定的错误信息,比如错误所在的生命周期钩子  // 只在 2.2.0+ 可用}2、script error的解决方式"script error.”有时也被称为跨域错误。当网站请求并执行一个托管在第三方域名下的脚本时,就可能遇到该错误。最常见的情形是使用 CDN 托管 JS 资源。其实这并不是一个 JavaScript Bug。出于安全考虑,浏览器会刻意隐藏其他域的 JS 文件抛出的具体错误信息,这样做可以有效避免敏感信息无意中被不受控制的第三方脚本捕获。因此,浏览器只允许同域下的脚本捕获具体错误信息,而其他脚本只知道发生了一个错误,但无法获知错误的具体内容。解决方案1:(推荐)添加 crossorigin="anonymous" 属性。<script src="http://another-domain.com/app.js" crossorigin="anonymous"></script>此步骤的作用是告知浏览器以匿名方式获取目标脚本。这意味着请求脚本时不会向服务端发送潜在的用户身份信息(例如 Cookies、HTTP 证书等)。添加跨域 HTTP 响应头:Access-Control-Allow-Origin: *或者 Access-Control-Allow-Origin: http://test.com注意:大部分主流 CDN 默认添加了 Access-Control-Allow-Origin 属性。完成上述两步之后,即可通过 window.onerror 捕获跨域脚本的报错信息。解决方案2难以在 HTTP 请求响应头中添加跨域属性时,还可以考虑 try catch 这个备选方案。在如下示例 HTML 页面中加入 try catch:<!doctype html> <html> <head> <title>Test page in http://test.com</title> </head> <body> <script src="http://another-domain.com/app.js"></script> // app.js里面有一个foo方法,调用了不存在的bar方法 <script> window.onerror = function (message, url, line, column, error) { console.log(message, url, line, column, error); } try { foo(); } catch (e) { console.log(e); throw e; } </script> </body> </html> // 运行输出结果如下: => ReferenceError: bar is not defined at foo (http://another-domain.com/app.js:2:3) at http://test.com/:15:3 => "Script error.", "", 0, 0, undefined可见 try catch 中的 Console 语句输出了完整的信息,但 window.onerror 中只能捕获“Script error”。根据这个特点,可以在 catch 语句中手动上报捕获的异常。总结上述的错误捕获基本覆盖了前端监控所需的错误场景,但是第三部分指出的两个其他问题,目前解决的方式都不太完美。对于有使用框架的项目:一是需要有额外的处理流程,比如示例中就需要单独为vue项目进行初始化;二是对于其他框架,都需要单独处理,例如react项目的话,则需要使用官方提供的componentDidCatch方法来做错误捕获。而对于跨域js捕获的问题:我们并不能保证所有的跨域静态资源都添加跨域 HTTP 响应头;而通过第二种包裹try-catch的方式进行上报,则需要考虑的场景繁多并且无法保证没有遗漏。虽然存在这两点不足,但前端错误捕获这部分还是和项目的使用场景密切相关的。我们可以在了解这些方式以后,选择最适合自己项目的方案,为自己的监控工具服务。—— —— 参考文档 —— ——1.Using XMLHttpRequest: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest2.script error 产生的原因和解决办法: https://www.alibabacloud.com/help/zh/faq-detail/88579.htm3.JavaScript执行错误: https://docs.fundebug.com/notifier/javascript/type/javascript.html4.betterjs的script error: https://github.com/BetterJS/badjs-report/issues/35.Vuejs的errorHandler: https://cn.vuejs.org/v2/api/index.html#errorHandler6.React的componentDidCatch: https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html
2 0 1738天前
admin
11215
在Windows Server2008 R2下安装vCenter6.7时,在快要安装结束时,出现了VMware Virtualcenter failed firstboot. Failed to generate VirtualCenter symmetric encryption key。的错误,如下图 于是安装失败,只能回滚操作 经过查找资料后发现,原来是缺少了MS17-010和MS17-012补丁 关于这两个补丁的资料,MS17-010   MS17-012 官方下载地址:MS17-010    MS17-012 耐心等待两个补丁安装完成          再次尝试进行安装,发现之前的报错已经消失,可以正常完成安装
2 0 1891天前
admin
20226
最近在折腾VM虚拟化时遇到一些问题,以下内容仅作为记录留存 ESXI 6.x 正常使用U盘升级(安装)会卡住在 bnxtroce.v00。 看到有人讨论说U盘安装会出问题,推荐刻录成光盘引导。 但这年头个人谁还有光驱? 不过倒是有点思路了。 默认 UltraISO 制作光盘启动是采用 USB-HDD+ 方式。 换成 USB-HDD+ v2 方式估计就成了。(也有说使用USB-ZIP+v2的,当时没试验,如果有兴趣的可以尝试下) 一试,果然没错。
2 0 1891天前
admin
4245
您需要登录并回复后才可以查看该文章内容
2 0 1916天前
admin
9656
登录服务器windows2008出现:远程桌面服务当前正忙,因此无法完成您尝试执行的任务。请在几分钟后重试。其他用户应该仍然能够登录 问题:有段时间登录服务器总是提示:远程桌面服务当前正忙,因此无法完成您尝试执行的任务。请在几分钟后重试。其他用户应该仍然能够登录(或者登录出现黑屏界面) 在微软找到的原因是:Csrss.exe 进程和某些应用程序 (例如,Microsoft Excel 或 Microsoft Visio) 之间发生的死锁情况下会出现此问题。 解决:下载一个修复补丁,安装后重启服务器即可。 具体信息在: https://support.microsoft.com/zh-cn/help/2661332/you-cannot-reestablish-a-remote-desktop-services-session-to-a-windows 附件补丁:点击下载 如果以上方法还解决不了“远程桌面服务当前正忙,因此无法完成您尝试执行的任务。”那么,就尝试看以下二个方法。 解决方法一 看一下你电脑任务管理器此项任务是否还在,如果在的话关掉就行了,很多时候是电脑没有反应过来造成的。 解决办法二 原因分析:此错误类似远程桌面超出最大连接数错误,远程桌面超出最大连接数时强制登录。 1、远程桌面超出最大连接数时可以使用以下命令强制登录,在命令行中执行: 2、用法:mstscconsolev:IP:Port 实例:mstscconsolev:192.168.0.1:3389 3、如果目标主机修改了终端端口,将Port改为修改后的端口即可。 上面就是Server 2008远程操作时提示“远程桌面服务当前正忙”的解决方法介绍了,本文一共介绍了两种解决方法,第一种可以先尝试,不行就用第二种方法。 PS:如果使用以上方法仍然存在该问题,可尝试升级至SP1,或尝试在不运行其他程序情况下尝试看是否仍存在该问题
3 0 1989天前
admin
6585
      原文地址:https://mp.weixin.qq.com/s/NnZQLuDDTSEqKuKXs_WvLg      相信大家最近都已经知道了这个Intel CPU的漏洞,目前微软、Linux等都已经针对各自发布了相对应的补丁,那么如何检查是否已经安装了呢      微软还发布了一套例程,可以用于检查更新是否被正确安装,或者是否需要额外的更新。   在Powershell启动之前,确保你使用管理员权限启动程序,保证你有足够的权限安装所需的模块。   下面的Powershell指令将安装一个Powershell模块,用于测试Meltdown和Spectre漏洞Install-Module SpeculationControl   如果你运行上述命令后,得到一个执行错误,则可能需要调整Powershell的执行策略。运行以下命令:Set-ExecutionPolicy Bypass   现在你可以运行第二个实际检查系统的Powershelli年命令:Get-SpeculationControlSettings   Google表示,大部分的CPU都容易受到Metldown和Spectre漏洞的攻击。如果上述命令的输出结果中有很多红色的文字,说明你的系统受到威胁。           下一步是打开Windows Update并按下“检查更新”按钮,直到你收到Meltdown/Spectre补丁。根据上文所述,对于使用了“有问题”的AV程序的用户,可能需要等待几天时间。       更新之后,您需要再次运行Get-SpeculationControlSettings。有两种可能的情况。常见的情况是以下结果:    上图意味着你的系统已经修复了Meltdown漏洞,但未能完全修复Spectre程序。正如Google所说,这是意料之中的,Spectre很难利用,但也很难修补。 红色文本意味着你需要额外的芯片组固件更新。微软和谷歌表示,OEM厂商将需要为用户提供这些额外的更新,来完成Windows系统级别Spectre漏洞的完整修复。由于计算机的使用年限,某些OEM厂商可能无法提供这些固件更新,这意味着你将无法完整修复Spectre漏洞。 如果一些正常,所有的检查结果将显示为绿色文本,如下所示:完成之后,请注意将Powershell的执行策略修改为限制模式,这可以缓解Powershell执行恶意命令。Set-ExecutionPolicy Restricted
2 0 2307天前
admin
12433
    首先,我们先来说明下Print Spooler这个服务的用途是什么    服务名称: Spooler    显示名称: Print Spooler    服务描述: 管理所有本地和网络打印队列及控制所有打印工作。如果此服务被停用,本地计算机上的打印将不可用。如果此服务被禁用,任何依赖于它的服务将无法启用。    可执行文件路径: C:\WINDOWS\system32\spoolsv.exe    由此我们可以看出,这个服务的用途就是用于提供打印服务的,如果意外停止了,那么将会导致无法打印,有时候意外停止后虽然我们手动启动了,但会发现马上这个服务又停止了,或者一安装打印机驱动打印服务就意外停止,或者想打印的时候,点击打印就意外停止服务等等    今天我们就来说下这个问题,不知道大家有没有遇到过,有时候启动Word或者Excel,会发现异常的慢,如果试图点击,还会看到程序无响应,大家不要觉得这里说的跟主题没有任何关系,实际上有时候启动Word卡死,往往就是打印服务的原因,当然这个占的比例不是很大,细心的网友,如果遇到启动Word卡死,点击后弹出程序无响应的时候可以试试点击查看详细信息,如果看到“spooler.exe”之类的字样,那么很明白的告诉你,这就是由于打印机的原因照成的。     当然也有人会遇到如开头所说的那样,服务意外停止了,重新启动以后,很快就又停止了,那么遇到这种情况该如何解决呢?     首先,如果你的电脑,启动该服务以后,不操作打印的相关任务下,打印服务不会停止的话,那么你可以尝试下将打印机页面中多余或已经不使用的打印机删除,看是否可以解决      如果不能解决,或者不操作的情况下,也会自动停止服务的情况,这个就需要到注册表中去清理打印机的残留数据。      方法: 1.按下键盘上的Win+R键,或在开始菜单找到“运行”,在弹出的窗口中,输入“regedit”,点击确定 2.在弹出的窗口中,我们定位到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers”     在这里,我们所看到的所有名称就是我们电脑上已经安装了的打印机,在这里,如果你能确定是哪台打印机引起的,你可以直接在这里把相关打印机的信息删除即可,如果不确定,那么把所有的删除了,也不会影响什么的,当然如果不放心,可以先做一个备份后,再做删除,一般情况下,我们删完以后,再回去重启打印服务,基本就不会再出现意外停止的问题了。
5 0 2393天前
admin
7702
    微软在最新的 Win8 / Win8.1 / Win10 系统中默认并没有集成 .NET 3.5,如果安装的话,必须是在线安装,甚是麻烦。为了解决这个问题,林雨沐风网 特意为大家整理了 NET 3.5 的离线安装方法。     如果你有一张原版的 Win8 或 Win8.1 或 Win 10 原版镜像,请将其放入光驱,记下光驱的盘符(这里假设为G盘),按 Win+X ,选择“命令提示符(管理员)”,在弹出的窗口中输入“DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:G:\sources\sxs”,回车即可自动安装NET3.5,安装完了关闭窗口即可。 ps:在这里有些小伙伴会说,为什么按同样的方法执行了,却提示找不到文件或者出错,出现这种情况的,请检查下,你所下载的镜像文件里sources目录下是否可以找到install.wim的文件,如果找不到是不适用于这个方法的噢
1 0 2577天前
admin
7154
蓝屏错误代码:0x00000024/0x00000023 蓝屏错误信息:无 注:23与24的错误代码其实处理的原理都是一样的,只不过显示的内容可能会有些不同 官方解释:0x00000024错误表示采用了NTFS文件系统的磁盘驱动器遇到了问题。这个错误一般是因为磁盘驱动器本身存在故障 引起的,例如磁盘错误、文件错误、磁盘碎片过多、磁盘读写过于频繁、存在体积过大的文件、中断要求封 包(IRP)受到了损坏等。 建议首先执行磁盘扫描程序对所有的磁盘驱动器进行全面检测,看看磁盘驱动器是否存在磁盘错误或文件错误;其次 请暂时关闭所有可能在后台对磁盘驱动器中的数据进行操作的软件,例如杀毒软件、数据备份软件等;再 其次请执行SFC /SCANNOW命令,检查一下Windows系统文件 %SystemRoot%\system32\Drivers\NTFS.SYS 是否受到了损坏或丢失;最后请在Windows中重新安装一下主板驱动程序提供的SATA或IDE控制器驱动程序。 解决方案: 其实关于这个问题,并非要重装系统才能解决,最简单的方法就是修复磁盘错误即可 1.首先,我们需要有一个可以引导进PE的U盘或者光盘 2.输入chkdsk x: /f     关于这段命令,x代表的是你系统所在的盘符,后面带上/f则是修复的意思 其中可能会出现非常多的滚动,这是正常现象,耐心等待,直到出现以下字样,我们就可以重启了,重启以后,是不是我们熟悉的桌面又回来了 备注: 出现此问题,请先使用硬盘检测软件,查看下硬盘的C5、C6、05是否正常,如果不正常极有可能表示硬盘存在坏道了,那么如果还在保修期,请尽快拿去保修(如果存在坏道情况下,使用以上的方法修复极有可能修复不成功或者时间过长) 
2 0 2578天前
admin
9441
如何查看蓝屏中关键信息      很多人,在电脑出现蓝屏的时候,都会慌张,不知道该怎么去解决,其实只要看懂了,处理起来非常简单           这是一张Win10以前的蓝屏图,图上画框的地方就是关键,首先是最上面的第一个框,这个框里的内容表示你的电脑蓝屏是因为什么原因,接着下面的第二个框则是关于这个蓝屏的错误代码,我们只需要知道这两个,然后查询相关的信息,即可获得解决方案           Win10版则有些不同,我们只需要关注最底下的那行Stop Code就行了=========================================================================     这里有些人会说,那个画面看不到,直接就重启了,那么这种情况下该怎么办呢,对于这种情况,我们可以开启系统自带的保存功能,之后通过一个小软件就可以查看了 开启方式: 1.首先,我们在桌面找到这个图标 2.点击右键,在弹出的菜单中选择属性3.接着,按如下图操作,下次蓝屏后系统就会自动保存下来蓝屏日志之后,我们再下载一个软件叫BlueScreenView的,就可以在里面看到蓝屏信息了 软件官方网站:http://www.nirsoft.net/ 文件名称:C:\Users\John\Desktop\蓝屏错误察看器(BlueScreenView).zip 文件大小:122421 字节 修改时间:2017年4月10日 16:42:12 MD5 :49978DF36A408806B32118DE76C17500 SHA1 :FE054BAE66531003422DC80796ABB3719A04928F CRC32 :F033C17D软件下载:蓝屏错误察看器(BlueScreenView).zip
1 1 2579天前
快速发帖 高级模式
桂公网安备 45010302000666号 桂ICP备14001770-3号
感谢景安网络提供数据空间
本站CDN由七牛云提供支持
网站已接入ipv6
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
如果某些内容侵犯了您的权益,请通过右侧按钮与我们联系
Your IP: 3.133.109.30 , 2024-05-03 06:41:03 , Processed in 0.38964 second(s).
Powered by HadSky 8.3.7
知道创宇云安全