分享

程序员调代码访谈:Marc-André Cournoyer

 weijianian 2016-08-07


『程序员调代码访谈』是Karim Hamidou 发起的一个程序员访谈系列,受访者分享他们遇到的最难/最有意思的Bug,以及如何解决。

本文的受访者是Marc-AndréCournoyer


你是谁?

我是一名软件开发者兼企业家。我来自加拿大的魁北克。我创建了OSS(译注:一个Ruby Web 服务器),写了一本书,出售了一些业务。现在我主要编写代码,在Coded教学。

你遇到最困难/有趣的bug是什么,你是如何解决?

最近,我为我的代码俱乐部编写了一个虚拟机,但不明白它为什么不能工作。

虚拟机的工作原理和CPU一样。它有一个指针指向当前正在执行指令。通常该指针被称为程序计数器(pc)。

虚拟机工作原理是执行一条指令并跳转到下一条。我就是那样编写的。指令的执行在一个很大的switch-case循环中完成。然后,增加程序计数器的值跳转到下一条指令(指令长度为2个字节,所以pc+=2)。

当然,有些指令也可以调整程序计数器值。特别是用于控制流的实现(比如if)。这些指令能够将程序计数器的值设置成内存中的某个地址。如果条件为真,程序指针将会指向内存中对应代码块的地址。这是CPU实现所有控制流结构的方式。

这里有个bug。记得之前说过,执行完一条指令,我就增加程序计数器的值。那意味着每当执行一条if语句,虚拟机都将跳转到对应内存地址+2的位置。多移动了两个字节。

解决方案是在执行指令之前增加程序计数器的值。


有什么要补充的?

以下是我用伪机器代码解决bug的过程。

1.遇到bug受阻。

2.用头撞击键盘。

3.停止编码,离开电脑。

4.回到电脑前,尝试些新的改动。

5.如果bug解决,跳转到第7步。

6.跳转到第2步。

7.喝酒庆祝。

每当发现bug,我努力地想要忽略它,保持自信,但都是徒劳。


原文来源:Debuggers

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多