收到短信number顯示unknown的問題解決和調試BUG的幾個建議

今天大部分時間都在解決一個問題,tester提交了一個bug:終端設備收到一條3GPP2 SMS短信,但是UI number顯示的是unknown,如下圖
在這裏插入圖片描述
第一感覺應該是PDU沒有攜帶number造成的,原先就遇到過這個問題,收到的3GPP2的PDU如下:
0000021002040903c69a469cdaa0a190060100088b0003200020017c21e980836a0c8e7b1c629c29808a71d27eec5e0b0543b4236a0c8e7a8a2c6d9ff862b6f0018af80480d35e7ac9480190017001ba8a1b5e7b384001880180023802128b42b7eb6a0c8e7a982b3842982ff84001c001828a18017b3847f84ff864ccb33842f80480d3184ac94c5d0c69cff862b6f002a00223169329b00306180925111344
使用tool解析這個PDU後發現有number,如紅色部分。
在這裏插入圖片描述
那就奇怪了,怎麼PDU含有number但是,UI怎麼不顯示呢。馬上check一下trace,發現從底層到UI顯示因爲sensitive信息不能泄露的原因,整個trace沒有任何關於sms address的信息。從code檢查看是否有針對number length的限制,也沒有發現任何線索。這時候才發現沒有trace或者log,很難解決任何問題。現在只有一個辦法了,看看自己能否復現,如果能復現,那就添加在flow的各個部分添加trace好了。因爲短信是網絡發送的,只能使用一個work around的復現方法了,當終端設備收到任何短信後,將收到的短信PDU直接替換爲上面的PDU即可。修改code後,問題能夠復現,後面就是添加trace了,添加trace有一個小技巧,最好一次能夠把flow的key point都添加trace,能夠節省時間。在等build結束的過程中,對正常顯示number的短信PDU也做了解析,居然發現了問題,正常顯示number的PDU address是original address,而這個PDU是destination address,馬上就猜到原因了,這條短信是收到的短信,address應該是original address(02),而現在是destination address,沒有將address進行保存和傳遞(code中對收到的短信只傳遞original address)。後面從build好的load複測問題的log也證明了猜測。問題轉給更底層,看看爲什麼傳遞的PDU不對,皮球就踢走了。
整個覆盤這個BUG,有幾個調試BUG的感觸:
1 問題發生後,不用急着馬上動手解決,最好能夠猜測一下原因,之後進行驗證,這樣能夠使自己能夠更瞭解和熟悉code。
2 儘快復現問題,如果能夠復現問題,那離解決問題就不遠了。
3 如果是不同的owner復現不同的層,那最好在接口處添加trace,那誰解決問題就不用相互推諉,並且能夠更快定位是哪層出現了問題。
4 添加trace應該選擇key flow和最關鍵的地方,開頭結束一般也是需要的,如果對log的數量有限制,更應該如此。
5 最好能夠保留正常flow的log,問題發生後,如果分析問題沒有方向,最好將fail的log和pass的log進行比對,這樣可能發現問題發生的原因。
6 對於曾經發生過的問題,復現方法,解決方法甚至如何發現root cause進行記錄,如果後面發生類似的問題可以找一下曾經是否解決過類似的問題,是否有可以借鑑的地方。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章