Có thể nhận một ứng dụng đang chạy từ thiết bị đầu cuối?


26

Đôi khi tôi cần chạy một ứng dụng từ thiết bị đầu cuối để gỡ lỗi. Nếu tôi chắc chắn lỗi sẽ xảy ra ngay sau khi khởi chạy ứng dụng, tôi có thể chạy ứng dụng này từ Terminal.

Tuy nhiên, lỗi xảy ra bất ngờ, và sau đó tôi chỉ cần theo dõi ứng dụng lỗi từ Terminal (để xem đầu ra của nó).

Sau đó tôi có thể nhận một ứng dụng từ thiết bị đầu cuối không được khởi chạy bằng Terminal không? Nếu vậy thì thế nào?


Cuối cùng tôi đã chọn câu trả lời của Michał Šrajer vì đó là câu hỏi mang tính chỉ dẫn nhất. Nhưng tất cả các câu trả lời của bạn chỉ là tốt và đánh giá cao quá. Chúc mừng.
Benjamin

Thông báo lỗi trước đó (đến stderr) được ghi vào ~/.xsession-errorsnếu bạn khởi chạy nó thông qua GUI.
Lekensteyn

Câu trả lời:


30

Mỗi quá trình trong linux có một thư mục đặc biệt /proc/{pid}/fd/. 0 là stdin, 1 là stdout và 2 là stderr. Vì vậy, giả sử bạn chỉ quan tâm đến đầu ra chẩn đoán, bạn có thể xác định quy trình, và sau đó trong thiết bị đầu cuối thực hiện:

để xem thiết bị xuất chuẩn:

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

để xem stderr:

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

OK, tôi hơi bối rối, khi tôi chạy, cat /proc/1840/fd/1nó dường như trả về đầu ra từ các quy trình khác ngoài quy trình tôi đã chọn. (1840 hiện đang dành cho Skype theo System Monitor) Nó cũng hiển thị đầu ra của các chương trình khác ...: |
Benjamin


6

Bạn có thể đính kèm với gdbmột quy trình đang chạy.

Cú pháp là

gdb program pid

Ok, bạn không thể xem mã nguồn, nếu thông tin gỡ lỗi bị tước, đây là mặc định cho các ứng dụng được triển khai. Nhưng bạn có thể thấy các thông báo stdout / stderr và debugger, segfaults.


Tôi đã thử nhưng nó không hoạt động. Chẳng hạn, System Monitor hiển thị ID Cairo-Dock là 1452, vì vậy tôi chạy gdb program 1452(tôi cũng đã thử gdb 1452), nhưng nó trả về "1452: Không có tệp hoặc thư mục nào như vậy."
Benjamin

Người đầu tiên nên làm việc. Nó đã trở lại cái gì?
enzotib

Đây là những gì nó trả lại đầy đủ sau khi yêu cầu 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

Tôi nói cái đầu tiên, cái đó với gdb program pid. Tôi nghĩ rằng sản lượng bạn hiển thị là từgdb pid
enzotib

Xin lỗi, là lỗi của tôi. `chương trình gdb 3385 (một lần nữa Skype) trả về điều này .
Benjamin

5

Bạn có khả năng tìm kiếm retty. Bạn cũng có thể tìm kiếm "đính kèm tty". Về cơ bản nó được thực hiện bằng cách sử dụng ptraceđể bạn thậm chí có thể tự cuộn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.