สามารถรับแอปพลิเคชันที่ทำงานอยู่จากเทอร์มินัลได้ไหม


26

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

อย่างไรก็ตามข้อผิดพลาดเกิดขึ้นโดยไม่คาดคิดและจากนั้นฉันเพียงต้องการตรวจสอบแอพพลิเคชั่น buggy จากเทอร์มินัล (เพื่อดูผลลัพธ์)

ฉันสามารถรับแอพพลิเคชั่นจากเทอร์มินัลซึ่งไม่ได้เปิดใช้โดยใช้เทอร์มินัลได้หรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร


ในที่สุดฉันก็หยิบคำตอบของMichałŠrajerขึ้นมาเพราะมันเป็นคำแนะนำที่ดีที่สุด แต่คำตอบของคุณทั้งหมดก็ดีและชื่นชมเช่นกัน ไชโย
Benjamin

ข้อความแสดงข้อผิดพลาดก่อนหน้านี้ (ไปยัง stderr) จะถูกเขียนไป~/.xsession-errorsหากคุณเปิดใช้งานผ่าน GUI
Lekensteyn

คำตอบ:


30

/proc/{pid}/fd/กระบวนการในลินุกซ์แต่ละคนมีไดเรกทอรีพิเศษ 0 คือ stdin, 1 คือ stdout และ 2 คือ stderr ดังนั้นสมมติว่าคุณสนใจเฉพาะเอาต์พุตการวินิจฉัยคุณสามารถกำหนดโพรเซส pid จากนั้นในเทอร์มินัลทำ:

เพื่อดู stdout:

cat /proc/{pid of process}/fd/1

เพื่อดู stderr:

cat /proc/{pid of process}/fd/2

ตกลงฉันสับสนเล็กน้อยเมื่อฉันเรียกใช้cat /proc/1840/fd/1ดูเหมือนว่าจะส่งคืนผลลัพธ์จากกระบวนการอื่นนอกเหนือจากที่ฉันหยิบขึ้นมา (1840 เป็นปัจจุบันสำหรับ Skype ตามการตรวจสอบระบบ) มันจะแสดงผลลัพธ์ของโปรแกรมอื่น ๆ ด้วย ... : |
เบนจามิน


6

คุณสามารถแนบกับgdbกระบวนการทำงาน

ไวยากรณ์คือ

gdb program pid

ตกลงคุณไม่สามารถเห็นซอร์สโค้ดได้หากข้อมูลการตรวจแก้จุดบกพร่องถูกลอกซึ่งเป็นค่าเริ่มต้นสำหรับแอปพลิเคชันที่ปรับใช้ แต่คุณอาจเห็นข้อความ stdout / stderr และ debugger, segfaults


ฉันลองแล้ว แต่มันใช้งานไม่ได้ ตัวอย่างเช่นการตรวจสอบระบบแสดงให้เห็นว่า Cairo-Dock ID คือ 1452 ดังนั้นฉันจึงเรียกใช้gdb program 1452(ฉันลองแล้วgdb 1452) แต่มันกลับมา "1452: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว"
Benjamin

คนแรกควรทำงาน มันกลับมาอะไร?
enzotib

นี่คือสิ่งที่มันจะกลับมาอย่างเต็มที่หลังจากขอ pid 1840 (Skype):GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... 1840: No such file or directory.
Benjamin

gdb program pidผมบอกว่าคนแรกที่มี ฉันคิดว่าผลลัพธ์ที่คุณแสดงมาจากgdb pid
enzotib

ขอโทษที่ฉันทำผิด `โปรแกรม gdb 3385 (อีกครั้ง Skype) คืนนี้
เบนจามิน

5

rettyคุณมีแนวโน้มที่จะมองหา คุณสามารถค้นหา "แนบ tty" ได้ด้วย โดยพื้นฐานแล้วมันใช้งานเสร็จแล้วptraceดังนั้นคุณสามารถม้วนเองได้

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