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


18

บางครั้งมันเกิดขึ้นที่แอพพลิเคชั่นบางตัวที่ไม่มีข้อผิดพลาดในการส่งออก (ไม่มั่นใจในกรณีของฉันอาจเป็นหนึ่งในการกำหนดค่าของฉันที่ไม่ถูกต้อง)

มีบันทึกข้อผิดพลาดที่ฉันสามารถตรวจสอบเพื่อเข้าใจว่าเหตุใดจึงเกิดข้อผิดพลาดหรือไม่

คำตอบ:


14

ขึ้นอยู่กับแอพพลิเคชั่น แอปพลิเคชันที่แตกต่างกันมีระบบบันทึกที่แตกต่างกัน ไม่มีศูนย์กลางบันทึกเดียวที่มีเอาต์พุตทั้งหมดจากโปรแกรมทั้งหมดที่รันบนระบบของคุณ

/var/logที่ถูกกล่าวว่าเป็นจำนวนมากของโปรแกรมจะวางแฟ้มบันทึกของพวกเขาในไดเรกทอรี โดยเฉพาะอย่างยิ่งไฟล์/var/log/syslog(หรืออาจจะ/var/log/messages) มีเอาต์พุตจาก "system logger" ซึ่งเป็นบริการที่มีให้โดยระบบที่โปรแกรมสามารถใช้ (หากพวกเขาเลือก) สำหรับการบันทึก แต่ไม่ใช่ทุกโปรแกรมที่ใช้งาน ส่วนใหญ่คุณจะพบข้อความจากบริการระบบระดับต่ำในไฟล์นั้นไม่ใช่แอปพลิเคชันกราฟิกที่คุณอาจใช้ตามปกติ

คุณอาจต้องการที่จะอ่านเพิ่มเติมเกี่ยวกับสถานที่ตั้งของแฟ้มบันทึกมาตรฐาน


6

มีไฟล์ขัดข้อง/var/log/crashes/สำหรับใช้กับ apport เพื่อรายงานข้อบกพร่อง คุณสามารถแยกการถ่ายโอนข้อมูลหลักด้วยapport-unpackวางการถ่ายโอนข้อมูลหลักผ่าน gdb และค้นหาสิ่งที่ทำให้โปรแกรมหยุดทำงาน

นี่คือทั้งหมดที่สมมติว่าคุณเป็นโปรแกรมเมอร์ หากคุณไม่ได้ ... คุณไม่สามารถแก้ไขข้อขัดข้องได้!


1
"นี่คือทั้งหมดที่สมมติว่าคุณเป็นโปรแกรมเมอร์หากคุณไม่ได้ ... คุณไม่สามารถแก้ไขข้อผิดพลาดได้!" ด้วยโอเพนซอร์ซเราทุกคนสามารถลองแก้ปัญหาของเราได้ด้วยความเสี่ยงของเราเอง)
Strae

@DaNiel: ไม่จริง! ถ้าคุณไม่ได้เป็นโปรแกรมเมอร์และคุณไม่ได้มีความเข้าใจที่ดีของรหัสการใช้งานที่มากกว่าที่คุณยุ่งกับรหัส buggier ด้วยอาจจะได้รับ :)
AntonioCS

1
แม้ว่าคุณจะไม่ใช่โปรแกรมเมอร์ในบางครั้งการค้นหาดัมพ์หลักสามารถทำให้คุณมีความคิดเกี่ยวกับปัญหา ตัวอย่างเช่นดูเหมือนว่ามันจะทำงานผิดพลาดในงานกราฟิกบางประเภท - บางทีฉันควรจะอัพเดทไดรเวอร์การแสดงผลของฉัน ...
user1242

2
.. และมันจะช่วยอธิบายข้อผิดพลาดในรายงานบั๊ก / ฟอรั่ม;)
Strae

1
คุณรู้จักโปรแกรมเมอร์ที่ไม่สามารถใช้ gdb ได้หรือไม่? ฉันเป็นโปรแกรมเมอร์และสามารถไปถึงbt full"โอ้ดู backtrace ... ด้วยสัญลักษณ์ที่ขาดหายไป ... เดาว่าฉันต้องติดตั้งสัญลักษณ์แก้ปัญหาและพยายามที่จะทำซ้ำความผิดพลาด ... " ฉันเคยคิดวิธีการตั้งค่า เบรกพอยต์ ... นั่นคือขั้นสูงสุดที่ฉันเคยได้รับมา
maco


2

บางแอพพลิเคชั่นมีแฟล็กที่สามารถใช้เปิดการดีบักเช่น -d, -D, --debug เป็นต้นตรวจสอบ man page ของแอพพลิเคชั่น ( man [my-app]) หรือเรียกใช้แอพด้วยแฟล็ก -h เพื่อดูว่ามี ตัวเลือก

แอพ GUI จำนวนมากเขียนเป็น $ HOME / .xsession-errors ดังนั้นจึงเป็นสถานที่ที่ดีในการตรวจสอบเอาต์พุต

สิทธิ์ของ maco ที่ apport น่าจะเป็นวิธีที่ดีที่สุดในการรับข้อมูลดีบั๊ก บางครั้งมันก็ไม่ได้จับความผิดพลาด

หากสิ่งอื่นล้มเหลวคุณสามารถบังคับให้ข้อมูลนั้นหมดโดยเรียกใช้แอปใน gdb มันจะเป็นสิ่งที่ชอบ:

$ gdb my-app

(gdb) run

... ทำทุกอย่างที่จำเป็นเพื่อให้มันขัดข้อง ...

(gdb) bt full

และไปจากที่นั่น

หากคุณไปเส้นทาง gdb คุณจะต้องติดตั้งสัญลักษณ์ตามที่กล่าวไว้ก่อนหน้านี้ ดูhttps://wiki.ubuntu.com/DebuggingProgramCrashสำหรับคำแนะนำในการจัดการ


คำตอบที่ดีที่สุดสำหรับฉันอย่างไม่ต้องสงสัย
Claudix

1

คุณสามารถไปที่/var/log/messages or crashesแล้วคุณสามารถเรียกใช้grepคำสั่งเหล่านั้นและค้นหาแอปพลิเคชันของคุณที่กำลังมองหาไฟล์อาจมีขนาดค่อนข้างใหญ่ในบางครั้ง มันจะส่งคืนข้อมูลที่เกี่ยวข้องกับแอปพลิเคชันของคุณ :)


1

หากคุณกำลังเรียกใช้แอปพลิเคชันของคุณจากไฟล์ .desktop ให้เพิ่มตัวเลือกTerminal=trueในไฟล์ .desktop ของคุณ สิ่งนี้จะเปิดเทอร์มินัลเมื่อคุณเรียกใช้โปรแกรมเอาต์พุตบนเทอร์มินัลจะคล้ายกับสิ่งที่คุณเห็นถ้าคุณเรียกใช้โปรแกรมผ่านบรรทัดคำสั่งในตอนแรก ด้วยวิธีนี้เมื่อ GUI หยุดทำงานหรือหยุดทำงานคุณสามารถดูว่าข้อความใดที่นำไปสู่


สิ่งนี้ทำอะไร ฉันมีชุดนี้อยู่แล้วและไม่ได้บันทึกอะไรเพิ่มเติม
Matt

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