สำหรับ Android Developer ทั้งหลาย ที่เปิด Member กับทาง Google แล้ว ใน Google play Developer Console นั้น จะมีเครื่องมือตัวหนึ่ง ที่เป็นรายงาน Error ต่าง ๆ ที่ User ทำการส่ง Report มาให้
ตามที่เคยเขียนไว้ในบทความ เรื่องของ Dev ที่อยากให้ User รู้ : Part 1 ช่วยกัน Report bug เมื่อ App เกิด Error กันเถอะ นั้น วันนี้มาดูวิธีวิเคราะห์ Error กันบ้าง
List of contents
Bug Report
ที่เมนู Crashs & ANRs (หรือ ข้อขัดข้องและ ANR) ของ App ต่าง ๆ ใน Developer Console นั้น เมื่อมี User ทำการ Report มาให้ จะมีรายงานดังรูป

เมื่อคลิกเข้าไป จะพบรายละเอียด ดังรูป

Analyze
จากรูปแรก ที่ผมทำ Hi-light สีเหลืองไว้ นั่นคือชนิด Exception ที่เกิดขึ้น ในตัวอย่างก็คือ NullPointerException วิเคราะห์เบื้องต้น ก็พอจะเดาได้ว่า น่าจะมีตัวแปรตัวใดตัวหนึ่ง ที่เป็น Null อยู่ แต่ดันไปเรียกใช้งาน…
จากรูปที่สอง สังเกต Hi-light สีเหลือง วิเคราะห์เพิ่มเติมได้ว่า เกิดที่ Class MainActivity และอยู่ใน Method onIabSetupFinished และที่ Hi-light สีแดง นั้น บอกไปถึง ไฟล์ที่เกิด Error และบรรทัดที่เกิด Error ในตัวอย่างก็คือ ไฟล์ MainActivity.java บรรทัดที่ 527 !!!
เปิด Source code ขึ้นมาดูในทันใด

จาก Code ดูเหมือนว่าไม่น่าจะมี Error เนื่องจาก Method onIabSetupFinished เป็นส่วนนึงของ Class IabHelper ซึ่งเป็น Utility Class ของ Google play In-app Billing ซึ่งโดยปกติ ก็ไม่ได้มีปัญหาอะไร ซึ่งที่ผมทดสอบมาค่อนข้างเยอะ ก็ไม่ได้พบปัญหาใด ๆ
แต่จากที่ User ได้ Report มาให้ นั่นแสดงว่า มีโอกาสที่ ตัวแปร result ที่ถูกใช้ในบรรทัดที่ 527 นั้น มีค่าเป็น Null
ซึ่งตัวแปร result เป็น Parameter ชนิด IabResult ที่ Class IabHelper ส่งมาให้ แต่ใน Code ไม่ได้ตรวจสอบก่อนว่า result เป็น Null แต่ไปเรียกใช้ Method isSuccess ซะก่อน ก็เลยเกิด NullPointerException ขึ้นมา
เมื่อวิเคราะห์เจอสาเหตุแล้ว ก็ทำการแก้ซะให้เรียบร้อย จะด้วยการเช็ค Null ก่อน หรือจะดัก NullPointerException ก็แล้วแต่จะถนัด…
เห็นไม๊ครับ Bug Report จาก User นั้น มีประโยชน์มาก แต่… ถ้าคุณแก้ไข Code ไปก่อนแล้ว บรรทัดที่เราจะหา Bug อาจไม่ตรงกัน ก่อนหน้านี้ผมก็เจอปัญหานี้บ่อย ๆ มี Report มา แต่หา Bug ไม่ค่อยจะเจอ เพราะฉะนั้น หลังจาก Publish App ขึ้น Play Store แล้ว อย่าลืม Backup Source code ไว้ด้วยนะ เพื่อที่จะได้เอาไว้ตรวจสอบเช่นในบทความนี้ นั่นเอง