2014-04-30 3 views
5

जीडीबी शिकायत कर रहा है कि मेरी स्रोत फ़ाइल निष्पादन योग्य से अधिक हालिया है, और ऐसा लगता है कि डीबगिंग जानकारी वास्तव में स्रोत फ़ाइल के पुराने संस्करण से संबंधित है, क्योंकि gdb एक रिक्त पंक्ति पर रोक रहा है:"स्रोत फ़ाइल निष्पादन योग्य से अधिक हालिया है" सिवाय इसके कि

Program received signal SIGSEGV, Segmentation fault. 
0x0000000000000000 in ??() 
(gdb) up 
#1 0x00007ffff7ba2d88 in CBKeyPairGenerate (keyPair=0x602010) at library/src/CBHDKeys.c:246 
warning: Source file is more recent than executable. 
246 
(gdb) list 
241    if (versionBytes == CB_HD_KEY_VERSION_TEST_PUBLIC 
242      || versionBytes == CB_HD_KEY_VERSION_TEST_PRIVATE) 
243      return CB_NETWORK_TEST; 
244 
245    return CB_NETWORK_UNKNOWN; 
246 
247  } 
248 
249  uint8_t * CBHDKeyGetPrivateKey(CBHDKey * key) { 
250 

लेकिन निष्पादन स्रोत फ़ाइल से नवीनतम है, यहाँ देखें:

$ ls -l library/src/CBHDKeys.c 
-rw-r--r-- 1 matt matt 9249 Apr 29 22:40 library/src/CBHDKeys.c 
$ ls -l bin/noLowerAddressGenerator 
-rwxr-xr-x 1 matt matt 17845 Apr 30 15:52 bin/noLowerAddressGenerator 

मैं make clean और ccache -C लेकिन एक ही समस्या होती है के बाद पुनर्निर्माण की कोशिश की। जब मैंने स्रोत फ़ाइल को अपडेट किया तो मैंने केवल व्हाइटस्पेस जोड़ा, इसलिए प्रोग्राम तर्क बराबर बना रहता है। मुझे लगता है कि इसके साथ कुछ करने के लिए कुछ है, लेकिन चूंकि मैंने सीसीएसी को मंजूरी दे दी है और make clean के साथ बिल्ड और बिन निर्देशिका को साफ़ किया है, मुझे यकीन नहीं है कि क्या है चल रहा।

संस्करण:

  • जीएनयू बनाओ 3.81
  • जीसीसी (Debian 4.8.2-16) 4.8.2
  • जीएनयू gdb (GDB) 7.6.2 (Debian 7.6.2-1)
  • ccache संस्करण 3.1.9
  • SolydXK - SMP डेबियन 3.13.5-1 (2014-03-04)
+1

'CBKeyPairGenerate' फ़ंक्शन नाम होगा, 'NoLowerAddressGenerator' निष्पादन योग्य है। –

+0

स्पष्ट जांच रहा है, लेकिन: मुझे लगता है कि कोई अन्य नोलावर एड्रेस जेनरेटर उस पथ पर exes नहीं है जो gdb उठाया जा सकता है? –

+0

केवल एक नोएलवर एड्रेस जेनरेटर है और जब मैं फ़ाइल के सटीक पथ में जाता हूं तो gdb कहीं भी मिश्रित फ़ाइलों को कैसे प्राप्त कर सकता है? –

उत्तर

0

शायद आप सबसे उपयोग नहीं कर रहे कोड के हाल ही में संकलित संस्करण, अगर यह एक साझा पुस्तकालय में है। आप अपने प्रोग्राम की लाइब्रेरी निर्भरताओं को देखने के लिए ldd noLowerAddressGenerator का उपयोग कर सकते हैं; मुझे नहीं पता कि प्रासंगिक पुस्तकालय का पता लगाने के लिए जीडीबी के भीतर से संभव है, लेकिन एक तरीका होना चाहिए (यदि आप जानते हैं तो कृपया टिप्पणी करें या संपादित करें)।

यदि यह वास्तव में मामला है, तो आप प्रोग्राम चलाने से पहले set environment LD_LIBRARY_PATH प्रोग्राम को चलाने से पहले, अपनी नव निर्मित लाइब्रेरी को किसी भी इंस्टॉल किए गए स्थान से आगे रखने के लिए चाहते हैं। लिंक करते समय आप RPATH ईएलएफ चर सेट करने में देख सकते हैं, लेकिन यह कम सहायता होने की संभावना है।

एक और संभावना है कि एक सिस्टम पर अपना डीबगर चलाने के लिए जहां आप जानते हैं कि लाइब्रेरी स्थापित नहीं है। निर्माण/डिबग/स्थापित वातावरण को अलग रखने के लिए मेरे पास schroot का उपयोग करके अच्छे परिणाम हुए हैं।

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