के साथ जीडीबी का उपयोग कैसे करें मैं एक प्रोग्राम चलाता हूं जिसमें एलडी_PRELOADing एक विशिष्ट पुस्तकालय है। इस प्रकार सं.एलडी_PRELOAD
LD_PRELOAD=./my.so ./my_program
मैं इस प्रोग्राम को जीडीबी के साथ कैसे चला सकता हूं?
के साथ जीडीबी का उपयोग कैसे करें मैं एक प्रोग्राम चलाता हूं जिसमें एलडी_PRELOADing एक विशिष्ट पुस्तकालय है। इस प्रकार सं.एलडी_PRELOAD
LD_PRELOAD=./my.so ./my_program
मैं इस प्रोग्राम को जीडीबी के साथ कैसे चला सकता हूं?
निम्नलिखित कार्य करें।
gdb your_program
(gdb) set environment LD_PRELOAD ./yourso.so
(gdb) start
आप मूल रूप से यह एक ही तरह से कर सकते हैं, बस प्रोग्राम नाम से पहले gdb
जोड़ें:
LD_PRELOAD=./my.so gdb ./my.program
आप का उपयोग वातावरण चर की जाँच कर सकते हैं:
(gdb) show environment LD_PRELOAD
दुर्लभ मामले में आपको वास्तव में इसे जीडीबी के अंदर बदलने की जरूरत है, उदाहरण के लिए जब एक dlopen()
डीबगिंग, आप ऐसा कर ca:
(gdb) set environment LD_PRELOAD ./my.so
ओह,, रुको यह gdb 7.6.2 के साथ मेरे लिए काम नहीं करता है! लाइब्रेरी लोड नहीं होती है, इसका मतलब है कि यहां तक कि यहां कोई भी जवाब वर्तमान उपकरण के साथ कम से कम सही नहीं है।
मुझे लगता है कि प्रीलोड का प्रभाव जीडीबी के लिए अवांछित है (शायद यह एक मॉकिंग लाइब्रेरी है जो 'ओपन()' और जैसे- 'fakeroot' आदि) को संशोधित करता है। –
पोस्टिंग set environment
काम करते हैं क्योंकि हम एक मामले में भाग जहां नहीं था:
set exec-wrapper wrapper show exec-wrapper unset exec-wrapper
जब 'Exec-आवरण' सेट किया गया है, निर्दिष्ट आवरण लांच करने के लिए प्रयोग किया जाता है डिबगिंग के लिए कार्यक्रम। gdb प्रपत्र निष्पादक रैपर प्रोग्राम के शेल कमांड के साथ आपके प्रोग्राम को शुरू करता है। प्रोग्रामिंग और उसके तर्कों में उद्धरण जोड़ा जाता है, लेकिन रैपर नहीं, इसलिए आपको अपने खोल के लिए उपयुक्त उद्धरण जोड़ना चाहिए। रैपर तब तक चलता है जब तक यह आपके प्रोग्राम को निष्पादित नहीं करता है, और फिर gdb नियंत्रण लेता है।
आप किसी भी प्रोग्राम का उपयोग कर सकते हैं जो अंततः एक रैपर के रूप में अपने तर्कों के साथ निष्पादित करता है। कई मानक यूनिक्स उपयोगिताओं यह करते हैं, उदा। एनवी और नोहुप। निष्पादन "$ @" के साथ समाप्त होने वाली कोई यूनिक्स शैल स्क्रिप्ट भी काम करेगी। साथ
(gdb) set exec-wrapper env 'LD_PRELOAD=libtest.so' (gdb) run
यहाँ सब कुछ चलाने के लिए एक रास्ता है (:
उदाहरण के लिए, आप env का उपयोग अपने खोल के वातावरण में चर की स्थापना के बिना, डिबग कार्यक्रम के लिए एक वातावरण चर पारित करने के लिए कर सकते हैं तर्क और पर्यावरण) एक आदेश के रूप में:
उदाहरण:
gdb --args env LD_PRELOAD=/usr/local/lib/libstderred.so ls -l
उत्सुक पर्यवेक्षक देखेंगे कि env
यहां एक exec wrapper (जैसे Alexey Romanov के उत्तर) के रूप में कार्य करता है।
आप -iex
ध्वज का उपयोग कमांड लाइन पर एक कार्यकारी-आवरण के रूप में env
आपूर्ति कर सकते हैं:
gdb -iex "set exec-wrapper env LD_PRELOAD=./my.so" ./my_program
यह संस्करण ठीक काम करता है जहां कुछ अन्य उत्तरों काम नहीं करते थे या जहां उपयोग करना आसान नहीं था। – Guillaume
http://stackoverflow.com/questions/4703763/how-to-run-gdb-with- एलडी-प्रीलोड - वहां कुछ भी मदद करता है? – Mat