调试

Atom拱了一些工具来帮助你理解预料之外的行为和调试问题。这篇指南介绍了一些工具和方法用于帮助你调试,以及提供了一些提交工单(issue)时的帮助信息。

升级到最新版本

你可能遇到了在最新版本已经修复的问题。

如果你从源码中编译Atom,需要拉回(pull)master的最新版本并重新构建。

如果你使用发布版本,检查你所使用的Atom是什么版本:

$ atom --version
0.178.0-37a85bc

访问发布列表来查看是否有更新的版本。你可以从发布页面下载Atom来升级到最新的版本,或者通过应用中的自动升级工具。应用中的自动升级工具在你重启Atom,或者点击Atom > Check for Update菜单之后,会检查和下载新的版本。

检查链接的包

如果你开发或者发布Atom的包,可能会有一些遗留的包链接到~/.atom/packages或者~/.atom/dev/packages目录下。你可以使用:

$ apm links

来列出所有链接的开发包。你可以使用apm unlink命令来移除链接,详见apm unlink --help

检查Atom和包的设置

在一些情况下,预料之外的行为可能是Atom或者某个包中的错误配置或者缺少配置造成的。

使用cmd-,来打开Atom的设置视图,或者Atom > Preferences来打开菜单选项。

在设置面板中检查Atom的设置,每个选项在这里都会有个详细的描述。例如,如果你希望Atom使用硬tab(真的tab)而不是软tab(空格),你应该取消“Soft Tabs”选项。

由于Atom自带一些包并且你可以自己安装附加的包,检查所有包的列表以及他们的设置。例如,如果你喜欢移除编辑器中间的竖直线,禁用Wrap Guide包。另外,如果你希望Atom移除行尾的空白字符,或者确保文件末尾有个空行,你可以在Whitespace包的选项中设置。

检查快捷键

如果你按下快捷键之后没有执行命令,或者执行了错误的命令,那个键位的快捷键可能出了些问题。Atom自带keybinding resolver,一个小巧的包来帮助你理解执行了哪个快捷键。

keybinding resolver会向你展示现有快捷键的列表,列表中包含以下内容:

  • 快捷键的命令
  • 快捷键有效时,用于定义上下文的CSS选择器
  • 快捷键被定义的文件

如果匹配到多个快捷键,Atom会根据选择器的特性和以及他们被加载的顺序来决定执行哪个快捷键。如果你想要触发的命令在keybinding resolver中列出,但是并没有执行,一般由以下两种原因造成:

  • 快捷键并没有在选择器定义的上下文中使用。例如,你不能在树视图没有焦点的情况下触发“Tree View: Add File”命令。
  • 有另一个快捷键具有更高的优先级。这通常发生在你安装的包的快捷键和现有的快捷键冲突的时候。如果这个包的快捷键具有更高的特异性的选择器,或者更晚被加载,它就会覆盖现有的快捷键。

Atom首先会加载核心功能的快捷键,之后才是用户定义的快捷键。由于用户定义的快捷键在随后加载,你可以使用keymap.cson文件来调整快捷键并解决问题。例如,你可以使用unset!指令来移除快捷键。

如果你发现一个包的快捷键优先级要高于核心功能包,向这个包的GitHub 仓库提交一个工单可能是个好主意。

查看是否在安全模式下出现问题

Atom绝大多数的功能都来源于你安装的包。一些情况下,这些包可能会导致预料之外的行为、问题或者性能问题。

从命令行在安全模式下启动Atom,来检查是否是你安装的一个包导致了问题:

$ atom --safe

这会启动Atom,但是并不会加载~/.atom/packages~/.atom/dev/packages中的包。如果安全模式下问题不再出现,那么可能那些包之一导致了问题。

要弄清楚到底是哪个包导致了问题,正常启动Atom,并且按下cmd-,来打开设置。由于设置可以让你禁用每个包,你可以依次禁用每个包,直到问题不再发生。在你禁用每个包来确保问题不再出现之后,重启(cmd-q)或者重新加载(cmd-ctrl-alt-l)Atom。

当你找到导致问题的包之后,你可以禁用或者卸载这个包,并且考虑向这个包的GitHub仓库提交工单。

检查你的配置文件

你可能在Atom的初始化脚本或者样式表中定义了一些个性化的功能。在一些情况中,这些个性化的调整可能会导致问题,所以清除这些文件,并重启Atom。

检查在开发者工具中的错误

当Atom中抛出了一个错误,开发者工具会在控制台标签页自动展示记录的错误。而如果开发者工具在错误触发之前打开,错误的整个栈轨迹会被记录:

如果你可以重现这个错误,使用这种方法来得到全部的栈轨迹。栈轨迹可能会指向你的初始化脚本,或者安装的某个特定的包,可以禁用它们并且向Github仓库提交工单。

在开发者页面的CPU profiler中判断性能问题

如果你在特定的情况中发现了性能问题,如果报告中包含了Chrome的CPU profiler截图,提供了一些什么东西比较慢的洞察,你的报告会很有用处。

要运行profiler,在命令面板中打开开发者工具(“Window: Toggle Dev Tools”),访问Profiles标签页,选择Collect JavaScript CPU Profile并点击start按钮。

然后返回Atom并且执行速度慢的操作来做记录。结束之后按下stop按钮。切换到Chart视图,会出现一副记录操作的图片。尝试放大缓慢的部分,并且截图来包含到你的报告中。你也可以保存并发送profile数据,通过按下左边面板中的名字(例如Profile 1)旁边的Save按钮。

详见Chrome的CPU profiling文档。

检查你是否安装了开发工具链

如果你在使用apm install安装一个包时出现问题,可能是因为那个包依赖了使用本地代码的库。所以你需要安装C++编译器和Python来安装它。

你可以运行apm install --check来查看Atom是否能够在你的机器上编译本地代码。

关于更多信息,在构建指导中查看你的平台上需要先满足的条件。

Atom飞行手册翻译: 3.7 调试相关推荐

  1. Atom飞行手册翻译: 2.12 在Atom中写作

    在Atom中写作 虽然Atom通常可能用来编写软件的代码,但是它还可以用来高效地编写文章.这通常采用一些标记语言,比如说Markdown和Asciidoc(也就是英文手册所用的格式)来完成.下面我们会 ...

  2. Atom飞行手册翻译: 2.7 ~ 2.10

    自动补全 如果你仍旧希望节约一些打字时间,Atom自带简单的自动补全功能. 通过使用ctrl-space,自动补全工具可以让你看到并插入可选的完整单词. 通常,自动补全工具会浏览当前打开的整个文档,寻 ...

  3. Atom飞行手册翻译: 3.4 文本处理包

    文本处理包 在我们写完第一个包之后,让我们看一看我们能写出来的其它包的例子.这一节会引导你创建一个简单的命令来将选中的文字替换为字符画(ascii art).在你在单词"cool" ...

  4. Atom飞行手册翻译: 4.2 深入键表(keymap)

    深入键表(keymap) 键表文件是以JSON或者CSON编码的文件,其中含有嵌套的哈希表.它们的工作方式像是样式表,但是它们指定匹配选择器的元素的快捷键的作用,而不是应用样式属性.下面是一些快捷键的 ...

  5. Atom飞行手册翻译: 4.5 ~ 4.8

    开发Node模块 Atom中的一些包是Node模块,而不是Atom的包.如果你想要修改这些Node模块,例如atom-keymap,你需要把它们链接到不同于普通Atom包的开发环境中. 把Node模块 ...

  6. Atom飞行手册翻译: 4.3 作用域设置、作用域和作用域描述符

    作用域设置.作用域和作用域描述符 Atom支持语言特定的设置.你可以在Markdown文件中软换行,或者在Python中把tab的宽度设置为4. 语言特定的设置只是一些东西的子集,我们把它叫做&quo ...

  7. Atom飞行手册翻译: 4.4 Atom中的序列化

    Atom中的序列化 当一个窗口被刷新,或者从上一次会话恢复的时候,视图和它相关的对象会从JSON表达式中反序列化,它们在窗口上一次关闭时储存.要使你自己的视图和对象兼容刷新,你需要让它们很好地执行序列 ...

  8. Atom飞行手册翻译: 4.1 配置API

    在我们编写了一些主题和包之后,让我们花一些时间来深入了解一些Atom的工作方式.在这一章中,我们会更进一步了解Atom中独特的内部API和系统,甚至查看一些源码来看一看它们是如何很好地工作的. 配置A ...

  9. Atom飞行手册翻译: 1.3 Atom基础

    Atom基础 既然Atom在你的系统中已经安装了,让我们启动.配置并且熟悉这一编辑器吧. 当你首次启动Atom时,你会看到这样一个界面: 这是Atom的欢迎界面,它会给你一些很好的建议,关于如何开始使 ...

最新文章

  1. php worker微信,微信小程序API createWorker
  2. java学习笔记(十二)----集合
  3. centos系统所需软件
  4. divmod数字处理函数
  5. spring配置c3p0连接池、spring的声明式事务管理
  6. Lombok常用注解和功能
  7. 通过带数据盘的自定义镜像来创建使用应用程序网关的虚拟机规模集
  8. markdown引入代码_给你自己的博客加个 Markdown
  9. hdu 5053(水题)
  10. 8086指令系统中的寻址方式
  11. MATLAB 对多个数据自动寻峰/能谱图自动寻峰
  12. docker 的具名挂载与匿名挂载
  13. 解决思科 Cisco Packet Tracer 7.3登录问题
  14. Upload labs
  15. 詹姆斯高斯林_詹姆斯·高斯林(James Gosling)关于Oracle与谷歌的竞争–“问题始终是互操作性”
  16. EasyPoi导出之复杂合并单元格
  17. 查找过的资料-防丢失
  18. 全球与中国现代风格沙发市场前景动态及投资方向建议研究报告2022-2028年
  19. Dijkstra算法以及与其他最短路径算法简要对比
  20. 【牛客刷题日记】— Javascript 通关秘籍(2)

热门文章

  1. git命令之git mergetool vi非正常退出.swp删除不了的问题
  2. 利用批处理自动执行sql脚本、备份、还原数据库
  3. OpenGL小试牛刀第一季
  4. lua52 C API测试代码
  5. 转:SQL Server游标的使用
  6. [置顶] Linux怎么添加用户成为sudoers
  7. HTML5 新元素标签系列:最简版 HTML5
  8. 深入理解MFC消息循环和消息泵的原理
  9. opencv学 之图像傅里叶变换dft
  10. 将一串随机数输入到二维坐标轴中,不断刷新JPanel,实现动态显示的效果微笑