Kadang saya perlu menjalankan aplikasi dari terminal untuk debugging. Jika saya yakin bug akan muncul sesaat setelah meluncurkan aplikasi, saya dapat menjalankan aplikasi ini dari Terminal.
Namun, bug terjadi secara tidak terduga, dan hanya saya yang perlu memonitor aplikasi kereta dari Terminal (untuk melihat hasilnya).
Bisakah saya mengambil aplikasi dari terminal, yang tidak diluncurkan menggunakan Terminal? Kalau begitu bagaimana?
command-line
process
debugging
Benjamin
sumber
sumber
~/.xsession-errors
jika Anda meluncurkannya melalui GUI.Jawaban:
Setiap proses di linux memiliki direktori khusus
/proc/{pid}/fd/
. 0 adalah stdin, 1 adalah stdout dan 2 adalah stderr. Jadi, dengan asumsi Anda hanya tertarik pada hasil diagnostik Anda dapat menentukan proses pid, dan kemudian di terminal lakukan:untuk melihat stdout:
untuk melihat stderr:
sumber
cat /proc/1840/fd/1
sepertinya mengembalikan output dari proses lain daripada yang saya ambil. (1840 saat ini untuk Skype menurut System Monitor) Ini menunjukkan output dari program lain juga ...: |Atau Anda bisa menggunakan
strace
seperti inisumber
Anda dapat melampirkan dengan
gdb
proses yang sedang berjalan.Sintaksnya adalah
Oke, Anda tidak dapat melihat kode sumber, jika informasi debug dilucuti, yang merupakan standar untuk aplikasi yang digunakan. Tetapi Anda mungkin dapat melihat pesan stdout / stderr dan debugger, segfaults.
sumber
gdb program 1452
(saya juga mencobagdb 1452
), tetapi mengembalikan "1452: Tidak ada file atau direktori."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.
gdb program pid
. Saya pikir output yang Anda tunjukkan adalah darigdb pid
Anda mungkin mencari
retty
. Anda juga bisa mencari "pasang tty". Pada dasarnya itu selesai menggunakanptrace
sehingga Anda bahkan bisa menggulung sendiri.sumber