ข้อมูลหรือรายงานที่รวบรวมได้รับการอัพโหลดไปยังระบบติดตามบั๊ก
หากกระบวนการใด ๆ ในระบบเสียชีวิตเนื่องจากสัญญาณที่โดยทั่วไปเรียกว่า 'ความล้มเหลว' (การละเมิดการแบ่งส่วนข้อผิดพลาดของบัสข้อยกเว้นจุดลอยตัว ฯลฯ ) หรือเช่นแอปพลิเคชัน Python แบบแพ็คเกจที่เพิ่มข้อยกเว้นที่ไม่ได้ตรวจสอบ ถูกเรียกใช้โดยอัตโนมัติ
มันสร้างรายงานความผิดพลาดเริ่มต้นในไฟล์ใน / var / crash / (ชื่อไฟล์ประกอบด้วยจากชื่อของปฏิบัติการที่ผิดพลาดและรหัสผู้ใช้) หากกระบวนการที่ขัดข้องเป็นของผู้ใช้ที่เข้าสู่ระบบในปัจจุบันหรือเป็นกระบวนการของระบบและผู้ใช้เป็นผู้ดูแลระบบภาคผนวกแจ้งผู้ใช้เกี่ยวกับความผิดพลาดและเสนอรายงานปัญหา
หากผู้ใช้ออกจากช่องทำเครื่องหมาย "ส่งรายงานข้อผิดพลาด" เปิดใช้งานApport จะอัปโหลดข้อมูลที่รวบรวมไปยังระบบติดตามบั๊ก หลังจากนั้นจะเปิดหน้าการยื่นข้อผิดพลาดของแพ็คเกจพร้อมชื่อข้อบกพร่องที่เป็นค่าเริ่มต้นและปล่อยให้กระบวนการยื่นข้อผิดพลาดที่เหลือไปยังเว็บ UI
Ubuntu ได้รับรายงานข้อผิดพลาดจำนวนมากทุกวันผ่านระบบติดตามบั๊กของเรา ต้องอ่านประเมินและจัดเรียงสิ่งเหล่านี้เพื่อให้สามารถแก้ไขได้ นี่คือที่เราสามารถใช้ความช่วยเหลือของคุณกับการช่วยเหลือด้วยข้อบกพร่อง สำหรับการแสดงภาพของกระบวนการบั๊ก triage ดู Flow Charts ที่ดีเหล่านี้
รายงานข้อผิดพลาดทุกครั้งเป็นการสนทนากับนักข่าว การติดต่อครั้งแรกที่นักข่าวมักจะมีกับชุมชนอูบุนตูก็คือการทดสอบบั๊กซึ่งพยายามรวบรวมรายงานบั๊กที่สมบูรณ์ เป็นสิ่งสำคัญมากที่เราต้องสร้างความประทับใจที่ดีดังนั้นโปรดสุภาพและพยายามใช้ภาษาอังกฤษที่ดีที่สุดของคุณ
การทำงานกับข้อบกพร่องที่เรียบง่ายและไม่มีการแก้ไขเป็นวิธีที่ดีในการเริ่มต้นและทำความคุ้นเคยกับขั้นตอนการทำ triaging เนื่องจากคุณจะต้องจัดการกับทุกแง่มุมของวงจรชีวิตของข้อบกพร่อง ส่วนข้อผิดพลาดที่ไม่ได้ระบุจะอธิบายตำแหน่งที่จะค้นหาได้
ประเภทของแมลง
รายงาน Apport
รายงาน Apport จะรายงานข้อผิดพลาดผ่านทาง Apport report โดยอัตโนมัติ การรายงานบั๊กโดยใช้ Apport เป็นวิธีที่ดีที่สุดในการรายงานข้อผิดพลาดเนื่องจากให้ข้อมูลแก่นักพัฒนาจำนวนมากเกี่ยวกับระบบที่ได้รับผลกระทบ เมื่อใช้ Apport จะต้องใช้ข้อมูลเพิ่มเติมน้อยลงเพื่อเร่งกระบวนการทั้งหมด
คุณสามารถรับรู้ข้อบกพร่องเหล่านี้ได้โดยเพิ่มรายการข้อมูลระบบลงในคำอธิบาย บางโปรแกรมมี hooks สำหรับ Apport เพิ่มข้อมูลเพิ่มเติมเมื่อรายงานข้อผิดพลาด ข้อมูลนี้สามารถพบได้ในสิ่งที่แนบมา
ยืนยันข้อบกพร่องแล้ว
เมื่อข้อผิดพลาดถูกทำเครื่องหมายเป็น 'ยืนยัน' มันยังไม่ได้รับการทดสอบอย่างสมบูรณ์ ข้อผิดพลาดนี้ใกล้เคียงกับการทำเครื่องหมายเป็น 'Triaged' แต่คุณต้องตรวจสอบให้แน่ใจว่าพร้อมสำหรับนักพัฒนาในการแก้ไข
คำขอคุณสมบัติ
หากรายงานข้อผิดพลาดเป็นคำขอคุณลักษณะจริงมีความเป็นไปได้สองอย่าง หากการปรับปรุงที่ร้องขอมีขนาดเล็กและกำหนดชัดเจนและ / หรือข้อเสนอแนะเกี่ยวกับโครงการต้นน้ำความสำคัญของข้อบกพร่องควรถูกตั้งค่าเป็น 'รายการโปรด' เมื่อรายงานเสร็จสมบูรณ์สถานะควรตั้งค่าเป็น 'Triaged'
มีเพียงสมาชิกของทีมควบคุมบั๊กของ Ubuntu เท่านั้นที่สามารถทำได้ หากคุณไม่ได้เป็นสมาชิกคุณจะต้องถามคนที่จะทำเพื่อคุณ วางหมายเลขบั๊กใน # ubuntu-bugs และบอกว่าคุณคิดว่าบั๊กนั้นควรถูกตั้งเป็น 'Wishlist' บางคนจะสังเกตเห็นและตั้งค่าให้คุณแม้ว่าจะไม่จำเป็นต้องใช้ในทันที
มันทำงานอย่างไรภายใน
การสกัดกั้นความผิดพลาด
Apport ใช้ / proc / sys / kernel / core_pattern เพื่อไพพ์ดัมพ์หลักลงใน apport โดยตรง:
$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c
$
หมายเหตุ: แม้ว่า ulimit จะถูกตั้งค่าเป็นไฟล์หลักที่ปิดใช้งาน (โดยการระบุขนาดไฟล์หลักของศูนย์โดยใช้ ulimit -c 0), apport จะยังคงจับภาพความผิดพลาด สำหรับการดักฟัง Python ขัดข้องจะติดตั้ง a /etc/python*/sitecustomize.py
to call apport ในข้อยกเว้นที่ไม่สามารถจัดการได้
ตัวอย่าง
Apport สามารถจับไฟล์หลักได้หาก PID 1 (Upstart) ตาย:
- หากพุ่งพรวดตรวจพบความไม่สอดคล้องภายในก็จะเพิ่มสัญญาณ SIGABRT
- ตัวจัดการความผิดพลาดพุ่งพรวดถูกเรียกใช้บน SIGABRT
- ตัวจัดการความล้มเหลวพุ่งพรวดส้อมกระบวนการเด็ก
- กระบวนการเด็กพุ่งพรวดอีกครั้งยกสัญญาณซึ่งส่งผลให้เด็กออกจากผิดปกติ
- เคอร์เนลตรวจพบโปรเซสลูกออกจากสิ่งผิดปกติและเรียก apport โดยไพพ์ไฟล์หลักเพื่อต่อท้ายอินพุตมาตรฐาน (เนื่องจาก / proc / sys / kernel / core_pattern)
- apport เขียนไฟล์หลักไปยังดิสก์ใน / var / crash /
- PID 1 รอให้ลูกของมันยุติ (ซึ่งจะเกิดขึ้นเฉพาะเมื่อภาคผนวกเสร็จสิ้นการเขียนไฟล์หลัก)
- PID 1 ออกแล้ว
- ความตื่นตระหนกของเคอร์เนล
- ในการบู๊ตครั้งต่อไป Whoopsie จะตรวจจับไฟล์ขัดข้องและประมวลผล
แบ็กเอนด์
เพื่อให้การหน่วงเวลาและผลกระทบของ CPU / IO ต่ำที่สุดเท่าที่จะเป็นไปได้/usr/share/apport/apport
รวบรวมเฉพาะข้อมูลที่จะต้องได้รับขณะที่กระบวนการขัดข้องยังคงมีอยู่: ข้อมูลจาก/proc/pid
การถ่ายโอนข้อมูลหลักเส้นทางปฏิบัติการและหมายเลขสัญญาณ /var/crash/executable_path.uid.crash
รายงานถูกเขียนไปยัง
ส่วนหน้าภาวนา
ใน Gnome ปรับปรุง-แจ้งเก็บนาฬิกา inotify /var/crash
บน เมื่อใดก็ตามที่มีสิ่งใหม่มันจะเรียก / usr / share / apport / apport-checkreports หากมีรายงานใหม่จะเรียก / usr / share / apport / apport-gtk ซึ่งเป็นส่วนหน้าที่แสดงในภาพหน้าจอด้านบน
จากนั้นส่วนหน้าจะรวบรวมข้อมูลเพิ่มเติมเช่นเวอร์ชันของแพ็กเกจไฟล์แพ็กเกจ checksums หรือเวอร์ชันของระบบปฏิบัติการและเรียกใช้ hook ของแพ็คเกจที่ตรงกันทั้งหมด หากต้องการปิดใช้งานสิ่งนี้คุณสามารถเรียกใช้ gsettings set com.ubuntu.update-notifier show-apport-crash false (ในฐานะผู้ใช้เดสก์ท็อปทั่วไปของคุณ)
เครื่องมือตรวจสอบอัตโนมัติบน Launchpad
ศูนย์ข้อมูล Canonical เรียกใช้บริการซึ่งจะตรวจสอบข้อบกพร่องด้วย apport โดยอัตโนมัติ โดยการแท็กข้อบกพร่องตามสถาปัตยกรรมใน Launchpad การย้อนกลับจะทำและแท็กจะถูกลบ แท็กที่ใช้คือ need-i386-retrace หรือ need-amd64-retrace ดูประกาศ
Apport Hooks ต่อแพ็คเกจ
เป็นไปได้สำหรับแพ็คเกจที่จะระบุข้อมูลที่รวบรวมจากระบบและรวมอยู่ในรายงานข้อผิดพลาด สิ่งเหล่านี้ทำโดย apport hooks ที่อยู่ในแพ็คเกจ สำหรับตัวอย่างที่มีประโยชน์ดู:
- source_xorg.py - เพิ่มไฟล์บันทึกเพิ่มเติมและรายละเอียดฮาร์ดแวร์เพื่อรายงานข้อผิดพลาด
- usplash - ละเว้นการขัดข้องในเส้นทางรหัสที่ระบุ
- source_totem.py - ถามคำถามของนักข่าวและรวบรวมข้อมูลต่าง ๆ ตามการตอบกลับ
ใน / usr / share / apport / package-hooks นอกจากนี้ยังมีรายการแพคเกจที่ให้ตะขอ apport
หากรายงานข้อขัดข้องหรือข้อผิดพลาดถูกส่งผ่านทาง apport ตะขอที่เกี่ยวข้องจะถูกเรียกใช้โดยอัตโนมัติ หากคุณมีข้อผิดพลาดที่รายงานแล้วซึ่งถูกยื่นโดยไม่มี apport และคุณสนใจข้อมูลจาก hooks เหล่านั้นคุณสามารถขอให้ผู้รายงานข้อผิดพลาดเพื่อใช้ bugnumber ของ apport
ใช้แหล่งที่มาลุค!
- คุณสามารถดาวน์โหลด upball tarball จากหน้าโครงการ Launchpad หรือ tarball source Ubuntu จากไฟล์เก็บถาวรของ Ubuntu
- apport ได้รับการพัฒนาด้วย bazaar RCS บน Launchpad หากคุณต้องการมีส่วนร่วมหรือพัฒนาระบบของคุณเองคุณสามารถสร้างสาขาของคุณเองด้วย bzr get lp: apport สำหรับ trunk หรือ debcheckout -a apport สำหรับสาขาบรรจุภัณฑ์ของ Ubuntu
แผนการในอนาคต
การปรับปรุงประสิทธิภาพต่าง ๆ เครื่องมือที่ดีกว่าในการทำงานกับรายงานและการรวมภาษาเพิ่มเติม (การติดตามสแต็กโมโน / Python ข้อความยืนยัน ฯลฯ ) ดูข้อกำหนดที่เกี่ยวข้อง
แหล่งที่มา: Apport , How To Triageและวิธีเปิดใช้ Apport