崩溃报告

工作站意外关闭时留下什么、发送什么、什么时候问你,以及开发版本带着的那两条调试命令。

以 Markdown 查看

崩溃报告是设置页面上诊断分组里唯一的一行。崩溃从不在应用倒下的过程中发送:它先被抓到一个文件里,下一次启动要么把它发出去,要么先给你看再问你一句。这一节管的就是决定走哪一条路的那个开关。这个页面需要更改设置权限。

自动发送崩溃报告

字段 它是什么 取值 / 默认 效果
自动发送崩溃报告 “应用崩溃时,在下次启动时不经询问直接发送报告。关闭时:先把报告显示给你,并征求你的同意。” 开或关。默认关闭。 开:下一次启动悄悄把抓到的报告发出去,服务器接收之后就把它清掉。关:下一次可见的启动打开那个征求同意的窗口。

运行时停止期间这个页面根本不画出来(见设置)。同样这一项在那个征求同意的窗口里也给了一次,就是“始终自动发送崩溃报告”那个复选框,在那里勾上它,这个开关就打开了。开关下面卡片写着:“要报告缺陷、提出改进建议或申请新驱动,请使用账户页面。”那个表单是反馈,因为它是用 Ganter 账户发出去的。

一份报告里有什么

一个没有被接住的错误把应用带倒时,全局处理器写下一个文件,也就是工作站数据根目录下的 crash\pending-crash.json,并且只保留最近的那一次崩溃。它里面有:

  • 应用版本和 Windows 版本;
  • 这个错误是在哪里被接住的(Dispatcher、AppDomain、TaskScheduler,或者一次没能走完的启动写作 Startup);
  • 异常的类型、它的消息和完整的堆栈文本,包括内层异常;
  • 最新那个日志文件的最后 60 行,作为通往这次故障的上下文;
  • 它发生的那一刻。

写下来之前,Windows 用户名和配置文件路径出现在哪里,就在哪里被换成 <user><userprofile>。这次清洗是一道保险,不是一份保证:自由格式的日志行里可能带着别的名字,正因如此,在任何东西离开之前,那个窗口会把整份内容显示出来。

开关关着的时候,崩溃之后第一次可见的启动会在外壳上打开要发送崩溃报告吗?:“Ganter Lab 上一次意外关闭了。发送这份报告有助于我们修复它。报告包含这个错误和最近日志的一小段。发送之前请在下面查看。”崩溃详情那个框显示的正是会被发出去的东西,配一个复制按钮,把同样这段文字放到剪贴板上(片刻之内写着“已复制”),这样你可以搜它,也可以把它交给技术支持。如果剪贴板拒绝,按钮就改写“复制未成功”,这样没发生的复制不会被当成发生了;那段文字仍留在屏幕上,可以自己选中。

命令 作用 什么时候变灰(情形) 什么时候不画出来(角色)
始终自动发送崩溃报告(复选框) 窗口关掉时把上面那个开关打开,不管你这一次发不发这份报告。 运行时停止期间(提示文字写“运行时已停止”)。这个窗口属于外壳,所以这个页面不画的时候它仍然画着。 从不。
不发送 丢掉这份报告并清掉文件;不会再为它问你第二次。 从不。 从不。
发送报告 把它发出去。成功时给出一条“崩溃报告已发送”的通知;服务器够不着时给出“崩溃报告未发送”并带上原因,那时文件留着,你可以现在发,也可以等下次启动再被问一次。 从不。 从不。

藏在通知区域里的启动(随 Windows 一起启动,或者用 --tray 拉起)不显示这个窗口;报告等着下一次可见的启动。开关打开着的时候,发送在后台完成,没有窗口,而一台当时离线的工作站会留着文件,下次启动再试。

报告发到 Ganter 服务器的反馈端点。账户页面上有 Ganter 账户登录着的时候,它就归到那个账户名下;没有账户时也照样接收。工作站不会再有别的东西离开:这里没有使用情况遥测。

那两条调试命令

应用的开发版本在开关下面带着两个按钮;装出来的正式版本一个都没有。

命令 作用 什么时候变灰(情形) 什么时候不画出来(角色)
模拟一次崩溃(调试) 在界面线程上抛出一个没有被接住的错误,好让抓取那条路真的写出一个崩溃文件,下一次启动就把征求同意的流程走一遍。 从不。 正式版本里没有。
抓取屏幕截图(调试) 在进程内运行代理界面工具所用的那套截图抓取,并把结果打印在按钮下面:“已保存:<path>”或者“抓取失败:<reason>”。在没有窗口的宿主上,结果写的是抓取不可用。 从不。 正式版本里没有。

这一节不做什么

这里没有日志查看器:诊断日志在事件上,在它的控制台标签页里,和详细捕获、技术支持包在一起。缺陷报告和各种申请在反馈上。崩溃文件不能从应用里编辑,而且不管是那个开关还是窗口上的发送,应用绝不会在两者都没有的情况下发出任何东西。