2010-05-23 4 views
30

मैं libpcap का उपयोग कर प्रोग्रामिंग अनुप्रयोग कर रहा हूँ। जब मैं सामान्य मोड में एप्लिकेशन को डीबग करता हूं, तो पॅक नेटवर्क डिवाइस नहीं प्राप्त कर सकता है। ऐसा लगता है कि मुझे रूट में एप्लिकेशन को डीबग करना है। मैं रूट में एप्लिकेशन को डीबग कैसे कर सकता हूं? मेरे पास रूट पासवर्ड है। मुझे लगता है कि ग्रहण में ऐसा विकल्प है जो डिबगिंग एप्लिकेशन के लिए रूट जोड़ सकता है, लेकिन मुझे नहीं पता कि यह कैसे करें। कृपया मदद करें।उबंटू में ग्रहण में रूट के रूप में एप्लिकेशन को डीबग कैसे करें?

+1

मूल रूप से डिबग, रूट के रूप में अपने डिबगर चलाते हैं। क्या आप आईडीई के माध्यम से डीबगर का उपयोग करने की कोशिश कर रहे हैं? – Artelius

+0

क्या आप मुझे बता सकते हैं कि रूट के रूप में डीबगर को कैसे चलाया जाए? हां, मैं ग्रहण आईडीई का उपयोग करता हूं। – futang

+0

जब तक आप रूट के रूप में अपना आईडीई भी नहीं चला रहे हैं, तो रूट के रूप में आपके डीबगर को चलाने के लिए शायद कोई आसान या सीधा आगे नहीं है। – nategoose

उत्तर

-1

अपने निष्पादन के साथ निर्देशिका में कंसोल से:

sudo gdb ./my_program 

ग्रहण दूरस्थ डीबगिंग का समर्थन करता है, तो आपको लगता है कि भले ही यह स्थानीय स्तर पर चल रहा है कर सकता है।

कंसोल से

:

sudo gdbserver localhost:<port_number> ./my_program 

और फिर बता पते (स्थानीय होस्ट और पोर्ट संख्या आपके द्वारा चुने गए) ग्रहण।

ओह हाँ, आपने कहा कि आप ऐसा कर रहे थे क्योंकि आप libpcap का उपयोग कर रहे थे, इसलिए आप टीसीपी पर रिमोट डीबगिंग का उपयोग नहीं करना चाहेंगे क्योंकि आप अपने अन्य नेटवर्क यातायात के अतिरिक्त अपने डिबगिंग कनेक्शन पैकेट को कैप्चर करना समाप्त कर सकते हैं ।

उस स्थिति में आप एक सीरियल पोर्ट पर अपने रिमोट (लेकिन वास्तव में स्थानीय) डिबगिंग करते हैं। मैं इस एक स्थानीय मशीन पर कभी नहीं किया है, लेकिन आप दो वास्तविक सीरियल पोर्ट (उन्हें संलग्न हालांकि एक रिक्त मॉडेम) का उपयोग करें या एक psudoterminal का उपयोग कर की कोशिश कर सकते: आप

sudo gdbserver /dev/ptmx ./my_program 

यह /dev/pts/ तहत psudoterminal पैदा करेगा लेकिन इसे इसके नाम का पता लगाना होगा, और यह इसे प्रतिबंधित अनुमतियों के साथ भी बना सकता है। आप उन चारों ओर मिल सकते हैं। जब तक आप रूट के रूप में बहुत सी टर्मिनल विंडो नहीं चला रहे हैं, तो यह संभावना नहीं है कि आपके पास रूट से संबंधित /dev/pts के तहत कई प्रविष्टियां हैं, इसलिए ऊपर दिए गए आदेश को चलाने के बाद और sudo chmod या sudo chown इसे उपयोग करने योग्य बनाने के बाद ऐसा करने पर ध्यान दें अपने सामान्य उपयोगकर्ता के लिए और फिर अपने डीबगर को अपने रिमोट डीबगिंग लक्ष्य के लिए अपने सीरियल कनेक्शन के रूप में उपयोग करने के लिए बताएं।

3

लॉन्च ग्रहण sudo के साथ (बस संपूर्णता के लिए: http://www.eclipse.org/forums/index.php?t=msg&goto=516838&)

अद्यतन: xmoex समाधान का पालन करें। यदि आप ग्रहण को रूट के रूप में चलाते हैं (यानी सूडो का उपयोग करके) आपकी फाइलें रूट-स्वामित्व वाली होंगी ... जो आप शायद नहीं चाहते हैं।
sudo visudo
अन्य सभी नियमों के बाद निम्न पंक्ति जोड़ें::

+0

यह एक अच्छा विचार नहीं है जैसा कि यहां बताया गया है: http://stackoverflow.com/questions/2580279/how-do-i-run-my-plplication-as-superuser-from-eclipse#comment2588681_2580560 –

+0

मैं आपके साथ पाओलो से सहमत हूं , xmoex उत्तर एक बेहतर समाधान है। –

56
  1. किसी भी पासवर्ड के लिए पूछा जा रहा है बिना रूट के रूप में चलाने के लिए अपने उपयोगकर्ता सक्षम
    <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb
  2. या में एक डिबग विन्यास को संशोधित रूट
    जैसे जीडीबी चलाने के लिए भागो में> डीबग विन्यास> C/C++ अनुप्रयोग> YourProject डीबग:
    परिवर्तन डीबगर> मुख्य> GDB gdb से sudo -u <youruser> gdb

अद्यतन (और चेतावनी के लिए डिबगर!):

उसकी टिप्पणी nategoose में बताया कि इस उत्तर के लिए एक चेतावनी के साथ आना चाहिए: एक उपयोगकर्ता को सक्षम करने से gdb की तरह वास्तव में मेरा उत्तर में सुझाव के लिए sudo उपयोग करने के लिए

उसे/उसके व्यवस्थापक विशेषाधिकार देता है जो कई मामलों में एक अवांछित साइड इफेक्ट हो सकता है। इसलिए मैं ऐसे माहौल में उपयुक्त उत्तर पर विचार करता हूं जहां यह नहीं माना जाता है कि उपयोगकर्ता सिस्टम को नुकसान पहुंचाने का प्रयास करेगा (उदाहरण के लिए यह आपका स्वयं का व्यक्तिगत कंप्यूटर या वर्चुअल मशीन है)

बहु-(गैर-भरोसेमंद) -सर पर्यावरण के लिए मैं इसे एक बेहतर idead व्यवस्थापक विशेषाधिकारों

+4

मैंने डीडीगर को जीडीबी से सुडो जीडीबी में बदल दिया और यह काम करता है। – shahensha

+1

शानदार उत्तर, दूसरों के लिए एक छोटी सी समस्या के लिए नोट करें, मैं ऐसा करने में भाग गया: मेरे पास LD_LIBRARY_PATH मेरे उपयोगकर्ता के रूप में सेट है लेकिन रूट में यह नहीं है, इसलिए मैंने इसे अपने सूडो कमांड में जोड़ा लेकिन सुडो आपको LD_LIBRARY_PATH सेट करने की अनुमति नहीं देता है इसलिए मैं इसे visudo में जोड़ा गया 'डिफ़ॉल्ट env_keep + = "LD_LIBRARY_PATH"' – stu

1

एक अन्य समाधान कुछ PCAP mentioned here के रूप में कब्जा करने के लिए आप (या gdb निष्पादन योग्य) अधिकार प्रदान करने के लिए है की आवश्यकता के बिना एक आवेदन डिबग करने के लिए सक्षम करने के लिए gdbunix' file capabilities उपयोग करने के लिए हो सकता है लगता है। इस तरह कुछ के साथ:

setcap cap_net_raw,cap_net_admin=eip /usr/bin/gdb 

आपको रूट के बिना gdb पर पैकेट को कैप्चर करने की अनुमति देने में सक्षम होना चाहिए।

+0

यह सुपर उपयोगकर्ता के रूप में चलाने पर काम करता है। 'Gdbserver' – fredk

0

इस सवाल का एक लंबे समय पहले कहा गया था, लेकिन मैं बगजिला में एक बग खोलना अगर यह किसी को भी करने में मदद मिलेगी और इस छोटे से धागा समस्या हल: bugzilla bug

3

आप एक मौजूदा प्रक्रिया को संलग्न करने के लिए स्थानीय होस्ट पर gdbserver उपयोग कर सकते हैं , निम्न आदेश पंक्ति है:

sudo gdbserver :<listening port> --attach <pid> 

या आप gdbserver का उपयोग कर एक नई प्रक्रिया बना सकते हैं:

sudo gdbserver :<listening port> <process executable> 

फिर आप एक्लिप्स में डीबगिंग कॉन्फ़िगरेशन बना सकते हैं, डीबगर टैब में, डीबगर आइटम, gdbserver का चयन करें, और बोले में कनेक्शन टैब में सुनना बंदरगाह इनपुट करें।

-1

सबसे आसान तरीका है, कोशिश sudo ./eclipse, तो हमेशा की तरह

+0

पर पैक कैप्चर तक पहुंच प्रदान करके दूरस्थ डिबगिंग को भी आसान बना दिया गया है कृपया डुप्लिकेट उत्तर प्रदान न करें। – lnman

संबंधित मुद्दे

 संबंधित मुद्दे