[trouble shoot]atol和atoll
就終于的結果來看,事實上就是一個小的錯誤。
但定位錯誤的時間比較漫長了。。
。
背景:出錯的代碼是 一段執行在 linux server上的程序,程序的主要功能是處理銀行pos刷卡記錄并做一些計算。最后匯總、格式化輸出。
該公司是和銀行打交道的。接的項目都是銀行的。
來公司的第二天(第一天熟悉環境,啥也沒干)老板就給了我一個2000多行的純c程序,一個測試出錯的測試文檔 和 出錯的輸出結果。
因為歷史的原因。。。。。
該段程序經過多人的補補修修,一個沒有頭文件。木有代碼復用,2000多行的一個主文件。
。。
。。
。
加上我是剛來的不懂業務知識。連測試用例都看不懂,像是在看天書。
我試著用vs打開程序,我靠,無法在windows下執行,里面調用的非常多linux系統中的庫函數。
。。
。
還好我會linux。我windows下裝有cygwin。竊喜。。
。。
程序執行環境不是問題了,也能夠正常執行。我就開始追蹤bug吧。我也不知道哪里有錯誤啊,我不懂業務知識。也不知道正確結果是啥啊。
。。果斷去問老板,哪里結果不多了。。。。
好了。知道哪里出錯了。接下來就是定位它了。在vim下看代碼。還是不錯的,就當再熟悉熟悉vim了,發現代碼里的變量名 還有函數名我都看不懂啊,發現做程序猿業務知識不能不懂啊。
。
。
硬著頭皮啃吧,
找到了一些和錯誤信息相關的變量了,就開始gdb調試了。
。。
。。。。
。。
。
。。
。
。。
終于鎖定了問題的出錯地點:atol函數。
。。哈哈 。
。
。
。
該段程序就是處理 的數據 都是 從銀行 獲取的, 比方pos卡消費信息。。。里面都是大數,atol()函數僅僅支持8位啊,換成atoll()就好拉。。
。。
總結:
溢出不會程序不會報錯,僅僅會導致結果不對,一定要注意溢出,接受這次的教訓
轉載于:https://www.cnblogs.com/lytwajue/p/7383935.html
總結
以上是生活随笔為你收集整理的[trouble shoot]atol和atoll的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习:最大似然估计与最大后验概率估计
- 下一篇: 高可用与负载均衡(5)之基于客户端的负载