|
『程序員調代碼訪談』是Karim Hamidou 發(fā)起的一個程序員訪談系列,受訪者分享他們遇到的最難/最有意思的Bug,以及如何解決。
本文的受訪者是Marc-AndréCournoyer。 你是誰?
我是一名軟件開發(fā)者兼企業(yè)家。我來自加拿大的魁北克。我創(chuàng)建了OSS(譯注:一個Ruby Web 服務器),寫了一本書,出售了一些業(yè)務?,F(xiàn)在我主要編寫代碼,在Coded教學。
你遇到最困難/有趣的bug是什么,你是如何解決?
最近,我為我的代碼俱樂部編寫了一個虛擬機,但不明白它為什么不能工作。
虛擬機的工作原理和CPU一樣。它有一個指針指向當前正在執(zhí)行指令。通常該指針被稱為程序計數(shù)器(pc)。
虛擬機工作原理是執(zhí)行一條指令并跳轉到下一條。我就是那樣編寫的。指令的執(zhí)行在一個很大的switch-case循環(huán)中完成。然后,增加程序計數(shù)器的值跳轉到下一條指令(指令長度為2個字節(jié),所以pc+=2)。
當然,有些指令也可以調整程序計數(shù)器值。特別是用于控制流的實現(xiàn)(比如if)。這些指令能夠將程序計數(shù)器的值設置成內(nèi)存中的某個地址。如果條件為真,程序指針將會指向內(nèi)存中對應代碼塊的地址。這是CPU實現(xiàn)所有控制流結構的方式。
這里有個bug。記得之前說過,執(zhí)行完一條指令,我就增加程序計數(shù)器的值。那意味著每當執(zhí)行一條if語句,虛擬機都將跳轉到對應內(nèi)存地址+2的位置。多移動了兩個字節(jié)。
解決方案是在執(zhí)行指令之前增加程序計數(shù)器的值。 有什么要補充的?
以下是我用偽機器代碼解決bug的過程。
1.遇到bug受阻。 2.用頭撞擊鍵盤。 3.停止編碼,離開電腦。 4.回到電腦前,嘗試些新的改動。 5.如果bug解決,跳轉到第7步。 6.跳轉到第2步。 7.喝酒慶祝。
每當發(fā)現(xiàn)bug,我努力地想要忽略它,保持自信,但都是徒勞。 原文來源:Debuggers
|
|
|
來自: weijianian > 《asp.net》