《Effective Debugging:软件和系统调试的66个有效方法》——第18条:从自己的桌面计算机上调试那些不太好用的系统-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《Effective Debugging:软件和系统调试的66个有效方法》——第18条:从自己的桌面计算机上调试那些不太好用的系统

简介:

本节书摘来自华章计算机《Effective Debugging:软件和系统调试的66个有效方法》一书中的第2章,第18节,作者[希]迪欧米迪斯·斯宾奈里斯(Diomidis Spinellis),爱飞翔 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第18条:从自己的桌面计算机上调试那些不太好用的系统

Jenny和Mike在谈论各自的调试经历。Jenny说:“我不喜欢在客户的计算机上面工作,要用的工具都没装,浏览器里也没有我收藏过的书签。这真是太麻烦了。我访问不了自己的文件,计算机上的按键绑定和快捷键,设置得也都不对。”Mike惊讶地看着她说:“快捷键?你还有快捷键可用,这都算不错的了。我调试的那台计算机,连键盘都没有!”

如果你在工作时无法使用自己配置好的这台计算机,那么工作效率确实会大幅降低。除了Jenny抱怨的那些事情,还会出现其他一些琐碎的问题,例如,连接因特网或内部网络时受到限制、计算机的配置方式不符合习惯(其中既包括屏幕与座椅等设施的位置,也包括鼠标与键盘等设备的选用)、必须经过长途跋涉到达气候湿热(或寒冷)的偏远地点,以及计算机性能过低等。这些问题目前都特别常见,而且考虑到业界对移动设备及物联网的热情,它们以后还会更加普遍。在很多情况下,你都必须离开自己所习惯的这台高端计算机,例如,要调试手机App,要调试带有嵌入式软件的设备,要解决只会在客户的计算机上面出现的问题,或是要处理数据中心里面的紧急状况等。在这些情况下,其实你依然有办法可以继续使用自己所熟悉的键盘,只不过你要提前做好准备。

对于手机App和某些嵌入式设备来说,我们可以在计算机上面通过设备模拟器(device emulator)来调试有问题的应用程序。然而从调试的角度来看,这种方式除了可以提供一些先进的日志记录功能,并不会给我们带来太大的帮助。有了模拟器之后,确实不需要再触摸手机屏幕上的键盘了,可是我们无法在模拟器里面运行符号调试器。比较好的一点是,我们可以同时在计算机里面打开模拟器与包含源代码的编辑器,这样就能够在修改完代码之后迅速看到结果,而不用再将其部署到实际的设备上面了。

还有一种更为强大的办法,是创建software shim(软件楔子),以便将应用程序中较为关键的那些部分,放在自己的计算机里面来运行,为此,我们经常会用到单元测试及mock对象(参见第42条)。这种办法虽然不能够使用图形界面,但是却可以把一些棘手的算法轻松地包含进来,这些算法需要进行大量的调试才能够处理好。我们可以在应用程序的算法里面设置挂钩,将其关联到某种简单的(如基于文件的)输入/输出上面,这样就可以在自己的计算机上面直接编译并运行源代码了,而且稍后也可以借助功能强大的调试器来对其中较为复杂的那一部分进行单步调试。

例如,我们要做一个手机App,把社交网络上面的朋友照片,导入手机的联系人中。这个程序有一个比较困难的地方,就是要和社交网站通信,并与手机中的联系人配对。于是,我们可以写一个命令行工具来充当shim,该工具的参数是某位联系人的名字,它会采用Facebook/LinkedIn/Twitter等网站的API来获取相关的信息,并在其中寻找与该联系人相匹配的资料。等我们把这部分逻辑调试好之后,就可以把它作为一个类,集成到手机App里面了。请注意,这部分代码始终都应该能够作为独立的命令来运行(例如,可以通过在类中编写main方法来做到这一点),因为以后如果出了问题,我们可以直接编译并运行这个命令。

要处理好与远程访问有关的事宜,以便能够远程地解决客户计算机上面的问题。由于远程访问通常需要管理员权限和一些专业的技术知识,因此要提前做好准备。尽管有很多操作系统都提供了远程访问其桌面的功能,但是技术支持人员一般还是愿意使用TeamViewer等专门的应用程序。此外,还可以考虑在客户的计算机上面安装一些可以简化调试工作的数据和工具。例如,安装一个查看器来检视应用程序中的二进制文件,或者安装一个运行跟踪器。如果一定要在第三方计算机上安装一款调试工具,那么笔者会选择Unix的strace或truss命令。顺便说一句,像我们这些做IT的人,经常会有朋友和家人请我们帮忙去解决计算机问题,在这种情况下,远程访问也可以简化问题的解决过程。

当前有很多后端运算,都是通过云主机提供商所搭建的机制来完成的,它们会提供漂亮的Web界面,使得开发者可以在其中进行调试并访问控制台。如果你要调试的服务器没有放在这样的云主机提供商那里,而是位于阴冷、嘈杂且不便访问的数据中心,那么你就得提前做好打算了。由于有些问题发生在与服务器建立网络连接之前,因此我们通常要使用服务器自身的屏幕及键盘,才能够解决这些问题。为了免去这种麻烦,可以考虑采购KVM over IP设备,它能够通过IP网络来远程访问计算机的键盘(keyboard)、显示器(video)及鼠标(mouse)。如果能够安装、配置并测试好这样一套设备,那你就可以在自己的桌面计算机上,对远程服务器在启动过程中所出现的问题进行调试。

要点

  • 把设备模拟器配置好,以便通过计算机屏幕和键盘来调试移动app。
  • 搭建shim机制,以便使用自己计算机中的工具来调试嵌入式代码。
  • 为远程访问做好准备,以便能够远程调试客户的计算机。
  • 配置KVM over IP设备,以便调试远程服务器上面的问题。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接