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

『程序员调代码访谈』是 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,我努力地想要忽略它,保持自信,但都是徒劳。

1 收藏 评论

关于作者:汤晓

(新浪微博:<a href="http://weibo.com/u/2151517721">@ashiontang</a>) 个人主页 · 我的文章 · 10

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部