2014-12-08 3 views
5

मेरे पास लिनक्स के तहत एक छोटा सी ++ प्रोजेक्ट है। जब मैं gdb के साथ निष्पादन डिबग करने की कोशिश मैं निम्नलिखित त्रुटि मिलती है:जीडीबी शुरू होने पर क्रैश (आंतरिक त्रुटि: follow_die_offset)

../../gdb/dwarf2read.c:16760: internal-error: follow_die_offset: 
Assertion 'dwarf2_per_objfile->reading_partial_symbols' failed. 
A problem internal to GDB has been detected, 
further debugging may prove unreliable. 

मैं दृढ़ता से निम्नलिखित कोड को परियोजना को सरल बनाया है और अभी भी एक ही त्रुटि मिलती है:

Bh:

#ifndef B_H_ 
#define B_H_ 

#include <vector> 
class B { 
public: 
    B(); 
    std::vector<double> p; 
}; 

#endif /* B_H_ */ 

B.cpp:

#include "B.h" 
B::B() {} 

धनबाद:

#ifndef D_H_ 
#define D_H_ 

#include "E.h" 

class D: public E { 
public: 
    D(); 
}; 

#endif /* D_H_ */ 

D.cpp:

#include "D.h" 

D::D() : E() {} 

E.h:

#ifndef E_H_ 
#define E_H_ 

#include <functional> 

class E { 

public: 
    void set(const std::function<double(void)>& f); 
    std::function<double(void)> e; 

}; 

#endif /* E_H_ */ 

E.cpp:

#include "E.h" 

void E::set(const std::function<double(void)>& f) { 
    e = f; 
} 

main.cpp:

int main() {} 

makefile:

all: Test 

%.o: %.cpp 
    icpc -c -std=c++11 -g -o [email protected] $< 

Test: main.o D.o E.o B.o 
    icpc -std=c++11 -o [email protected] $^ 

clean: 
    rm -f D.o E.o B.o Test main.o 

.PHONY: all clean 

त्रुटि तब होती है, तो मुझे क्या करना:

gdb Test 

और फिर आह्वान

run 
gdb CLI में

मेरे सिस्टम:

ओपन Suse 12.3, 64 बिट

icpc --version:

icpc (ICC) 15.0.1 20141023 

icpc -v:

icpc version 15.0.1 (gcc version 4.7.0 compatibility) 

gdb --version:

GNU gdb (GDB) SUSE (7.5.1-2.1.1) 

जीसीसी --version:

gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] 

मुझे पता नहीं क्या दिया कोड और क्यों डिबगर दुर्घटनाओं के साथ गलत क्या है। उदाहरण के लिए यदि मैं कक्षा बी के निर्माता को टिप्पणी करता हूं (जो कुछ भी नहीं करता है और डिफ़ॉल्ट कन्स्ट्रक्टर के बराबर होना चाहिए) त्रुटि अब और प्रकट नहीं होती है।

+0

यदि इंटेल सिस्टम स्टूडियो के उस संस्करण में अपना स्वयं का जीडीबी शामिल है, तो क्या आप इसे आजमा सकते हैं? –

+0

मुझे लगता है कि मैंने किया लेकिन मुझे यकीन नहीं है कि मुझे क्या करना है। बस intel_composer bin-folder से gdb निष्पादन योग्य ले लो? – user1304680

+0

मेरे पास संस्करण में, सिस्टम स्टूडियो बिन निर्देशिका में एक 'debuggervars.sh' फ़ाइल है। यदि आपके खोज पथ में वह निर्देशिका है, तो 'स्रोत debuggervars.sh' टाइप करें, और यह आपके पर्यावरण को स्थापित करेगा ताकि आप' gdb-ia' टाइप करके इंटेल के डीबगर को चला सकें। –

उत्तर

1

I have no idea what is wrong with the given code and why the debugger crashes.

संभावना अपने कोड के साथ गलत कुछ भी नहीं है, लेकिन अपने संकलक अमान्य बौना डिबग जानकारी पैदा किया जा सकता है, और अपने कुछ हद तक वर्ष GDB निश्चित रूप से एक बग है कि के साथ काम किया है।

ध्यान दें कि आप पुराने जीडीबी के साथ बहुत नए icpc का उपयोग कर रहे हैं, इसलिए यह आश्चर्यजनक नहीं है।

आपका पहला कदम वर्तमान जीडीबी (7.8.1) बनाने और यह जांचना चाहिए कि अभी भी कोई समस्या है या नहीं।

ऐसा होने की संभावना में, आपको इसे जीडीबी bugzilla में रिपोर्ट करना चाहिए।

कामकाज के रूप में, आप आईसीसी के बजाय जीसीसी के साथ अपने स्रोत बनाने का भी प्रयास कर सकते हैं।

+0

मुझे लगता है कि यह सच है, त्रुटि भी पुराने आईसीसी संस्करणों से दूर चला जाता है। मैं नए जीडीबी के साथ भी कोशिश करूंगा। – user1304680

+1

जीडीबी 7.8.1 एक ही त्रुटि उत्पन्न करता है। – user1304680

+0

फिर आप कम से कम एक बग्रेरपोर्ट (टेस्टकेस के साथ) फ़ाइल कर सकते हैं। – dbrank0

1

यह धागा देखें: https://software.intel.com/en-us/forums/topic/540685 - यह 7.9 में तय जीडीबी में एक मुद्दा प्रतीत होता है। अद्यतन मैंने जीडीबी को 7.9 तक अपग्रेड किया और समस्या वास्तव में कम हो गई, मेरे लिए कम से कम।

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