क्या कोई टर्मिनल से रनिंग एप्लिकेशन ले सकता है?


26

कभी-कभी मुझे डिबगिंग के लिए टर्मिनल से एक एप्लिकेशन चलाने की आवश्यकता होती है। अगर मुझे यकीन है कि एप्लिकेशन लॉन्च करने के बाद बग कम होगा, तो मैं इस एप्लिकेशन को टर्मिनल से चला सकता हूं।

हालांकि, बग अप्रत्याशित रूप से होते हैं, और उसके बाद ही मुझे टर्मिनल से छोटी गाड़ी के आवेदन की निगरानी करने की आवश्यकता होती है (इसके आउटपुट को देखने के लिए)।

क्या मैं तब टर्मिनल से एक एप्लिकेशन चुन सकता हूं, जिसे टर्मिनल का उपयोग करके लॉन्च नहीं किया गया था? यदि हां, तो कैसे?


मैंने अंततः मिशेल er'srajer का जवाब उठाया क्योंकि यह सबसे शिक्षाप्रद था। लेकिन आपके सभी जवाब अच्छे थे और सराहना भी। चीयर्स।
बेंजामिन

~/.xsession-errorsयदि आपने इसे GUI के माध्यम से लॉन्च किया है, तो पिछले त्रुटि संदेश (stderr को) लिखे गए हैं ।
लेकेन्स्टाइन

जवाबों:


30

लिनक्स में प्रत्येक प्रक्रिया की एक विशेष निर्देशिका होती है /proc/{pid}/fd/। 0 स्टैडआउट है, 1 स्टडआउट है और 2 स्टडर है। इसलिए, यह मानते हुए कि आप केवल नैदानिक ​​उत्पादन में रुचि रखते हैं आप प्रक्रिया को निर्धारित कर सकते हैं, और फिर टर्मिनल में करते हैं:

स्टडआउट देखने के लिए:

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 और डीबगर संदेश, segfaults देख सकते हैं।


मैंने कोशिश की, लेकिन यह काम नहीं किया। उदाहरण के लिए सिस्टम मॉनीटर से पता चलता है कि काहिरा-डॉक आईडी 1452 है, इसलिए मैं दौड़ता हूं gdb program 1452(मैंने भी कोशिश की gdb 1452), लेकिन यह "1452: कोई ऐसी फाइल या निर्देशिका नहीं लौटाता है।"
बेंजामिन

पहले काम करना चाहिए। यह क्या लौटा?
enzotib

यह वही है जो 1840 (स्काइप) के लिए पूछने के बाद पूरी तरह से लौटता है: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। मुझे लगता है कि उत्पादन दिखाया से हैgdb pid
enzotib

माफ कीजिएगा यह मेरी गलती है। `gdb कार्यक्रम 3385 (फिर से स्काइप) देता है यह
बेंजामिन

5

आप संभावना तलाश रहे हैं retty। आप "संलग्न ट्टी" भी देख सकते हैं। मूल रूप से यह प्रयोग किया जाता है ptraceताकि आप अपना रोल भी बना सकें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.