ฉันจะดูไฟล์ CoreDump ได้อย่างไร


13

เมื่อรายงานข้อผิดพลาดจากความผิดพลาดข้อผิดพลาดจะถูกทำให้เป็นส่วนตัวและไฟล์ชื่อ CoreDump.gz เอกสาร Bug Triage ระบุว่าสิ่งต่อไปนี้:

หากความผิดพลาดยังคงมีไฟล์แนบ CoreDump.gz แสดงว่าไม่สามารถรับการติดตามสแต็กแบบสัญลักษณ์โดยอัตโนมัติและตรวจสอบรายการซ้ำ

Stacktrace.txt ดูเหมือนมนุษย์สามารถอ่านได้ ฉันจะเข้าใจความหมายของการติดตามสแต็กได้อย่างไร CoreDump withing CoreDump.gz ดูเหมือนมนุษย์ไม่สามารถอ่านได้ "การติดตามสแต็กแบบเต็มสัญลักษณ์" คืออะไร อะไรคือความแตกต่างระหว่าง "การติดตามสแต็กแบบเต็มสัญลักษณ์" ฉันจะดูเนื้อหาของไฟล์ CoreDump ได้อย่างไร? (ลอง 'cat' แต่ไม่สะอาด)

คำตอบ:


15

Coredump.gz เป็นหน่วยความจำ (บีบอัด) ที่สามารถเข้าถึงได้โดยโปรแกรมที่ล้มเหลว มันเป็นไฟล์ไบนารี Coredumps เป็นขุมสมบัติที่มีข้อมูลส่วนตัวทุกประเภทที่จะขุด

Coredumps สามารถดูได้โดยใช้ 'gdb':

gdb --core=mycoredump

แน่นอนคุณจะยังคงต้องการแพคเกจการตรวจแก้จุดบกพร่องที่เกี่ยวข้องกับหลักนี้

จากนั้นคุณสามารถสร้าง stacktrace โดย:

(gdb) bt

เพื่อสร้าง stacktrace ของเธรดปัจจุบัน - โดยไม่มีการแก้ไขพารามิเตอร์ - หรือ

(gdb) thread apply all bt full

เพื่อสร้าง stacktrace ของเธรดทั้งหมดใน coredump พร้อมการแก้ไขพารามิเตอร์

stacktrace และ stacktraces เต็มแสดงโฟลว์การควบคุมภายในโปรแกรม สำหรับ Python ด้านบนของ stacktrace แสดงการโทรที่เก่าที่สุดโดยล่าสุดที่ด้านล่าง สำหรับทุกอย่างที่สวยมากอันดับต้น ๆ คือการโทรล่าสุดและอันดับล่างสุดที่เก่าที่สุด

สแต็คแบบเต็มไม่เพียงแสดงโฟลว์เท่านั้น แต่ยังแสดงค่าของพารามิเตอร์ด้วย นี่คือที่เรามักจะหาข้อมูลส่วนตัว - ตัวอย่างเช่นสมมติว่าคุณเห็นฟังก์ชันที่เรียกว่า "validatePassword" ด้วยพารามิเตอร์ที่เรียกว่า "รหัสผ่าน" และค่าของ "MySecretPassword" ...

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


CoreDump เป็นไฟล์ไบนารี แต่คุณจะดูอย่างไร Stacktraces มีประโยชน์ก็ต่อเมื่อมีการติดตั้งแพคเกจการแก้ปัญหาแล้วทำไม apport จึงรายงานเป็นอย่างอื่น?
komputes

1
ไฟล์ CoreDump ไม่ได้มีไว้สำหรับการดู แต่จะใช้สำหรับการดีบักใน gdb คุณต้องมีเครื่องที่ใช้ซอฟต์แวร์รุ่นเดียวกัน (และการขึ้นต่อกันทั้งหมด) ที่สร้างความผิดพลาดและมีแพ็คเกจการดีบักจากนั้นคุณสามารถใช้สิ่งที่ Carlos โพสต์ไว้ด้านบนเพื่อรับการติดตามสแต็ก
stgraber

2
ตอนนี้ว่าทำไมยังเกี่ยวข้องกับ apport อยู่เพราะ apport มี "retracers" ที่คว้า coredump ของคุณติดตั้งแพ็คเกจ debug บนกล่องใน DC แล้วแนบ stacktract เต็มรูปแบบไปยังรายงานบั๊ก
stgraber

เอกสารเพิ่มเติม: gnu.org/software/gdb/documentation
komputes

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