คุณได้จัดส่งคุณจะได้รับข้อผิดพลาด seg ที่หายาก การตรวจสอบตัวชี้หรือปล่อยมันไป?


9

คุณได้ส่งการยืนยันถูกปิดคุณจะได้รับรายงานข้อผิดพลาดที่หายากซึ่งระบุว่ามีการละเมิดตัวชี้โมฆะในรหัสของคุณ ในสภาพแวดล้อมการพัฒนาปัญหาจะได้รับการยืนยันโดยยืนยัน

สิ่งที่คุณมีคือรายงานข้อขัดข้องดังนั้นการทำซ้ำปัญหาจึงเป็นไปไม่ได้ การติดตามย้อนกลับไม่ได้ให้เบาะแสใด ๆ ว่าทำไมความผิดพลาดจึงเกิดขึ้นตั้งแต่แรก

ตัวเลือก: - เพิ่มการตรวจสอบตัวชี้เพื่อป้องกันความผิดพลาด วิธีนี้จะช่วยป้องกันความผิดพลาด แต่คุณอาจไม่ทราบด้วยซ้ำว่าทำไมจึงเกิดขึ้นตั้งแต่แรก - ปล่อยให้มันบินไปหวังว่ามันจะเกิดขึ้นอีกครั้งด้วยสถานการณ์จำลอง

สมมติว่าแอปพลิเคชันไม่ได้มีไว้สำหรับขีปนาวุธนำทางหรือระบบเบรกอัตโนมัติ ...

คุณจะเลือกแบบไหน


มันอาจจะสะดวกในการโพสต์รายงานข้อผิดพลาดพร้อมกับไฟล์รหัสที่เกี่ยวข้อง (อาจจะอยู่ใน Pastebin.com) ไปยังเว็บไซต์ Stack Overflow หากคุณต้องการให้มันถูกแก้ไข ...
Tamara Wijsman

2
@TomWij: อย่าคิดว่าอย่างนั้น .. ส่วนใหญ่อาจจะถูกปิดเพราะ "แปลเป็นภาษาท้องถิ่นมากเกินไป"
Naveen

@ Naveen: อาจจะ ... ฉันไม่ใช่แขกธรรมดาดังนั้นนี่เป็นความเห็นของ SU-mind
Tamara Wijsman

1
@ Naveen: เกินไปแปลหมายถึงภูมิภาคเกินไปมันเกี่ยวกับภูมิศาสตร์และไม่เกี่ยวกับความเชี่ยวชาญของปัญหา แต่คำถามนี้อาจถูกปิดโดย SO
Maniero

คำตอบ:


7

ฉันเลือกวิธีที่สอง ไม่มีจุดใดในการซ่อนความผิดพลาดถ้าตัวชี้ NULL ไม่คาดคิด ณ จุดที่เกิดความผิดพลาด ตัวชี้ NULL นี้ในกรณีส่วนใหญ่จะเป็นหนึ่งในอาการของสิ่งอื่นที่ไม่ถูกต้อง ถ้าเราซ่อนมันด้วยตัวชี้ NULL ให้ตรวจสอบว่าเกือบจะแน่ใจว่ามีบางอย่างที่จะแตก ฉันรู้สึกว่าคุณมีโอกาสที่ดีกว่าในการติดตามสถานการณ์ถ้าคุณรู้ว่าจุดที่มันขัดข้องทุกครั้งแทนที่จะเป็นที่สุ่ม


1
ฉันพิงความคิดเห็นนี้ด้วยตัวเอง การรับรู้ของผู้ใช้เป็นสิ่งที่ฉันกังวล ความผิดพลาดอย่างชัดเจนดูเหมือนว่ามีบางสิ่งผิดปกติ อย่างไรก็ตามหากสถานที่ได้รับการคำนวณผิดอย่างสมบูรณ์ก็จะสังเกตเห็น
MM01

2
ในความคิดของฉันแม้ว่าผู้ใช้อาจหงุดหงิดจากความผิดพลาดเป็นครั้งคราวพวกเขาจะอารมณ์เสียจริง ๆ ถ้ามันให้ผลที่ผิดเพราะอาจไม่มีใครสังเกตเห็น
Naveen

ความผิดพลาดเร็วที่สุดจะช่วยให้คุณค้นหาปัญหาและช่วยให้ผู้ใช้หลวมข้อมูลน้อยลง
Spudd86

นอกจากนี้ฉันจะใช้ valgrind เพื่อค้นหาสิ่งที่ฉันทำผิด (หรืออย่างน้อยฉันก็พยายามในกรณีใด ๆ ก็อาจจะพบปัญหาบางอย่างที่คุณควรแก้ไข) ฉันจะเพิ่มชุดคำยืนยันเพิ่มเติมเพื่อลองจับตัวชี้ NULL ก่อนหน้านี้ ขอให้ผู้ใช้ลองเรียกใช้งาน
บิลด์

3
  1. ความผิดพลาดเกิดขึ้นบ่อยแค่ไหน? มันเกิดขึ้นเพียงหนึ่งในลูกค้าหลายรายในบางกรณีที่คลุมเครือ? อะไรคือผลที่ตามมา (การสูญหายของข้อมูลระบบล่ม) หากเกิดขึ้นทุก ๆ 1 ล้านกรณีและพวกเขาต้องรีสตาร์ทแอปพลิเคชันและไม่มีข้อมูลสูญหายคุณอาจไม่จำเป็นต้องแก้ไข - ทิ้งไว้เช่นนั้น

  2. ราคา (เวลาและเงิน) แพงแค่ไหนในการเพิ่มการยืนยันและจัดส่งให้กับลูกค้าทุกคน (ถ้าเพียงส่วนหนึ่งของลูกค้าที่ได้รับเวอร์ชั่นใหม่แล้วส่วนที่เหลืออาจเข้าสู่ปัญหา null ที่ไม่ได้ตรวจสอบ)? โอกาสในการค้นหาปัญหามีอะไรบ้าง หากคุณเพียงแค่ใส่รหัสตรวจสอบแบบสุ่มในโค้ดหวังว่าจะได้รับข้อผิดพลาดก็เป็นวิธีปฏิบัติที่ไม่ดี ...

  3. สามารถสร้างปัญหาบนเครื่องของลูกค้าได้หรือไม่? คุณสามารถเข้าถึงเครื่องนั้นได้หรือไม่? นี่อาจมีค่าจริงๆ

  4. ตรวจสอบรายงานข้อขัดข้องของคุณและตรวจสอบให้แน่ใจว่าข้อมูลที่ให้ไว้มีประโยชน์และสามารถช่วยคุณวินิจฉัยปัญหาได้


2

ในสภาพแวดล้อมการพัฒนาปัญหาจะได้รับการยืนยันโดยยืนยัน

ในลำดับที่เฉพาะเจาะจงมันจะถูกจับและแก้ไข แต่กลับไม่ได้ติดตามย้อนกลับปัจจุบัน
คุณควรจะเห็นสิ่งที่ผิดพลาดกับดัมพ์เกิดข้อผิดพลาดคุณตรวจสอบพารามิเตอร์ ฯลฯ หรือไม่?

ความพิเศษที่สามารถทำได้ขึ้นอยู่กับระยะเวลาที่คุณต้องการใส่ลงไป:

  • เก็บถาวรดัมพ์ความล้มเหลวและอ้างถึงในโค้ดด้วยความคิดเห็นที่บรรทัดที่มันล้มเหลวซึ่ง
    อนุญาตให้ตรวจสอบดัมพ์ chrash ที่คล้ายกันมากเพื่อทราบว่ามันเกิดขึ้นมาก่อน ...
    [เวลาที่ใช้: สั้น]

  • ตรวจสอบเพิ่มเติม, บันทึก, ... คุณต้องการป้องกันมันและรับข้อมูลเพิ่มเติมในครั้งต่อไป
    [เวลาที่ใช้: ปานกลาง]

    การละเมิดตัวชี้ที่ว่างเปล่าเกิดขึ้นในรหัสของคุณ

  • ตรวจสอบว่าเป็นไปไม่ได้ที่จะเรียกใช้แอปพลิเคชันในลักษณะดังกล่าวเพื่อให้เกิดการละเมิดนี้
    [เวลาที่ใช้: ยาว]


1
โพสต์นี้ไม่ได้เกี่ยวกับวิธีการแก้ไขปัญหามากนัก แต่เป็นการดำเนินการในสถานการณ์สมมุติ (เช่นในกรอบเวลาที่จัดสรรแหล่งที่มาของปัญหาไม่สามารถอนุมานได้)
MM01

2

วันนี้ฉันส่งพร้อมยืนยัน () เปิด ไม่มีค่าใช้จ่ายมากนักและสามารถทำให้ชีวิตง่ายขึ้นมากในสถานการณ์ที่เป็นศัตรู (เช่นสภาพแวดล้อมของลูกค้าของคุณมักจะเป็นศัตรูมากกว่าสภาพแวดล้อม dev หรือ QA ของคุณ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.