國慶後上班,領導要求給乙個模組寫乙個pc測試軟體,功能要求很簡單,讀取配置檔案,然後根據檔案中的資料對模組進行依次定時查詢/設定,加上測試用了三天時間(注:用本人電腦做的測試),最後是發給同事,但在他的電腦都無法執行,雙擊軟體沒有任何反應。
需要說明一下:我的電腦是32位的win8系統,64位win7系統
軟體我使用32位的vs2010編寫的,.net framework是4.0的
看到這個情況,我首先想到的是同事的電腦沒有 .net framework 4.0,但是根據以往的經驗,如果.net framework 版本不夠或者沒有安裝.net framework,執行軟體的話,都會有對話方塊提示的,但這次沒有,為了排除這個問題,我在另外乙個同事(32位 xp 系統)的電腦上安裝了.net framework 4.0 ,然後執行該軟體,依然沒有任何介面或者提示框出現。既然不是執行環境的問題,第二個想到的就是作業系統,但是c#預設的目標平台是「any cpu」,按道理,這個軟體對於32位和64位系統都應該能執行的,為了以防萬一,我做了兩個軟體,1---生成 目標平台為"x86"的軟體,2---生成乙個目標平台為「x64」的軟體,可是這兩個軟體無論是在32位的系統中還是在64位的系統中都無法執行。
瘋了,徹底被擊敗了。看來問題應該出現在**中,可是除錯沒有問題,在我電腦中執行也沒出現異常。被擊敗了,可是問題還是得解決啊,把同事的電腦接過來,還是在以前的軟體上改,但這次不一樣,改一部分,就在同事的電腦上執行一下,這樣應該就可以確定問題了吧。通過這個方法終於找到問題的根源了:
string ports = serialport.getportnames();serialport1.portname = ports[0].trim();
明眼人一看應該知道是什麼問題了吧!其實,當確定是這兩行**搞得鬼的時候,我也知道是什麼問題了。在這個軟體的另外乙個地方也有這兩行**,但稍有不同:
string ports = serialport.getportnames();combobox_portname.items.addrange(ports);
if (string.isnullorempty(wm.serialport1.portname))
}else
對比這兩段**,問題就更明顯了吧。
總結下:問題就是沒有對ports這個string 陣列的長度進行呼叫前的判斷。
而為什麼在我的電腦上可以執行,在其他人的電腦上就不行呢?那是因為在沒有接串列埠線的情況下,我的電腦也會有乙個com口,其他人的電腦在沒有接串列埠線的情況下,是沒有com口的。
其實,還有一種方法可以很快的找到問題,那就是 try{}catch{},可能是人為這個測試軟體太簡單了吧,在異常處理上沒有像其他軟體那樣做的很細緻,這也是乙個問題,而且是乙個很嚴肅的問題,故藉此文誡勉自己!
乙個陣列作為引數傳遞引發的思考?
乙個陣列作為引數傳遞引發的思考 初學者常犯的錯誤 正文今天給大家分享一下陣列作為引數傳遞時,可能會遇到的坑,接下來上 實現氣泡排序 函式的功能很簡單,呼叫sort 函式對陣列進行排序,讓我們來看看執行結果吧。執行環境x86得到的結果為 執行環境為x64得到的結果為 通過上面的兩個執行結果,有了如下問...
乙個陣列長度問題引發的思考
var arr arr 0 0 arr 1 1 arr.foo c console.log arr.length 為什麼.length不會把foo算進陣列長度?進一步思考為什麼關聯陣列沒有陣列長度?var arr arr 5 1 arr.foo c console.log arr.length 結合...
將乙個陣列追加到別乙個陣列
問題 將乙個陣列追加到別乙個陣列 方案 1 使用array merge 在使用這個合併陣列時如果使用數字鍵,那麼索引會重新編號.如果使用字串鍵,則會導致第二個陣列中的鍵 覆蓋第乙個陣列中的同名鍵 此時第乙個陣列中的值也就消失了 如果是兩種鍵則會表現出上述兩種特徵.r array 1 2 dd 3 4...