2016-03-01 11 views
0

У меня есть следующий coredump.сбой при доступе к строке std ::

Program terminated with signal 11, Segmentation fault. 
#0 0xb5b1c2f8 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)() 
    from /arm-none-linux-gnueabi/libc_m/usr/lib/libstdc++.so.6 
#0 0xb5b1c2f8 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)() 
    from /arm-none-linux-gnueabi/libc_m/usr/lib/libstdc++.so.6 
#1 0x00964f5c in Qct::OamClientUtil::getRsp (this=<value optimized out>) 
at /Agent/include/oamClientUtil.hpp:92 
#2 0x00902118 in MapPM::sendCollect (this=0xb4af9928) at /gent/src/mapPM.cc:557 
#3 0x00921dc0 in Agent::handlePMCollectReq (this=<value optimized out>, buf=0xb335ccb0) 
at /Agent/src/Agent.cc:5671 
#4 0x0095deb4 in AgentRxHandler (handle=<value optimized out>, buf=0xb335ccb0) 
at /Agent/src/uslAgent.cc:398 
#5 0x0080f364 in uslDCTEntry (dct=20401048) at /usl/src/lcid/uslDCT.cc:253 
#6 0x009c867c in TASK::taskEntryPoint (params=0x1375098) at /emvxworks/taskLib.cpp:224 
#7 0x009c7bbc in pthreadw_taskentry (arg=<value optimized out>) at /emvxworks/pthread_wrapper.cpp:786 
#8 0xb59a6120 in start_thread (arg=0xb4aff460) at pthread_create.c:307 
#9 0xb592e9f8 in nfsservctl() 
from /CodeSourcery/4.6.3-2012.03-57/arm-none-linux-gnueabi/libc_m/lib/libc.so.6 
Backtrace stopped: frame did not save the PC 

Я довольно смущен, как простая строка вызывает крушение.

Поскольку код довольно большой, я сейчас вставлю соответствующие классы. При необходимости добавит больше.

/Agent/include/oamClientUtil.hpp:92 

37 class OamClientUtil 
38 { 
39 public: 
40  OamClientUtil(); 
41 
42  virtual 
43  ~OamClientUtil(); 
44 
45   
46  void 
47  initOamProxyConn(); 
48 
49  void 
50  setBatch(
51   OamClients& batch 
52  ); 
53 
54  /// load oam transactions from a file 
55  /// and convert them to a list of oam client transactions 
56  bool 
57  loadTrxFromFile(
58   std::string& batchfilename 
59  ); 
60 
61  /// actual processing the list of transactions 
62  MgmtResult 
63  run(); 
64 
65  bool 
66  isGood(); 
67 
68  /// return the dryrun flag 
69  bool 
70  isDryrun(); 
71 
72  /// set the dryrun flag 
73  bool 
74  isDryrun(bool flag); 
75 
76  const OamErrorString& 
77  errorString() const; 
78 
79   
80  void 
81  initRsp() { 
82   getRsp_ = ""; 
83  } 
84  void 
85  initKeyRsp() { 
86   getKeysRsp_ = ""; 
87  } 
88 
89   
90  std::string 
91  getRsp() { 
92   return getRsp_; 
93  } 
94  std::string 
95  getKeysRsp() { 
96   return getKeysRsp_; 
97  } 
98  bool 
99  getKeysLast() { 
100   return getKeysLast_; 
101  } 
102 private: 
103  static const unsigned REQ_TIMEOUT_SECS = 10; 
104 
105  /// send get request 
106  MgmtResult 
107  sendGetReq(
108   OamClientTrxPtr trx 
109  ); 
110 
111  /// send getKeys request 
112  MgmtResult 
113  sendGetKeysReq(
114   OamClientTrxPtr trx 
115  ); 
116  /// send set request 
117  MgmtResult 
118  sendSetReq(
119   OamClientTrxPtr trx 
120  ); 
121 
122  /// send clear request 
123  MgmtResult 
124  sendClearReq(
125   OamClientTrxPtr trx 
126  ); 
127 
128  /// process the list of transactions 
129  MgmtResult 
130  processTransactionList(
131   OamClientTrxList& trxlist ///< The list of transaction to be processed 
132  ); 
133 
134  /// process one transaction 
135  MgmtResult 
136  processTransaction(
137   OamClientTrxPtr trx ///< The transaction to be processed 
138  ); 
139 
140  /// print content of one transaction 
141  void 
142  printRequests(
143   OamClientTrxPtr trx 
144  ); 
145 
146  void 
147  indCallback(
148   unsigned int msgId, 
149   QctUint8_t* indMsgBuffer, 
150   unsigned int indMsgBufferLength); 
151 
152   
153  static ProvisioningPtr 
154  initProvisioningPtr(); 
155 
156   
157  static MgmtXmlPtr 
158  initMgmtXmlPtr(); 
159 
160  QmiClient qmiClient_; 
161  MgmtXmlPtr mgmtXmlPtr_; 
162  OamClients batch_; 
163  SerialStreamFixedBuf<QMI_FSM_OAM_CLIENT_MAX_LENGTH_V04> sstream_; 
164  QctUint16_t trxid_; 
165 
166  std::string batchfilename_; 
167  bool isDryrun_; 
168  bool isGood_; 
169  QctUint32_t oamSessionId_; 
170  OamErrorString errorMsg_; 
171  std::string getRsp_; 
172  std::string getKeysRsp_; 
173  bool getKeysLast_; 
174  ProvisioningPtr provisioningPtr_; 
175 }; 
176 




#2 0x00902118 in MapPM::sendCollect (this=0xb4af9928) at /Agent/src/mapPM.cc:557 



    549Qct::MgmtResult MapPM::sendCollect() 
    550{ 
    551 clUtil_.initRsp(); 
    552 clUtil_.setBatch(oamClients_); 
    553 Qct::MgmtResult mr = clUtil_.run(); // process every transaction in oamClients_ 
    554 if (mr == Qct::MGMT_RESULT_FAIL) { 
    555  //return Qct::MGMT_RESULT_FAIL; 
    556 } 
    557 return makePMFile(clUtil_.getRsp()); 
    558 
    } 

clUtil_ is object of Qct::OamClientUtil 
    Qct::OamClientUtil clUtil_; 

/Agent/src/Agent.cc:5671 

    5671 Qct::MgmtResult result = mapPM.sendCollect(); 

/Agent/src/uslAgent.cc:398 

    400  case OAM_AGENT_PMSETUP: 
    401   oamAgent.handlePMSetupReq(buf); 
    402   break; 
+5

Чтобы сделать более разумный вопрос, разделите код до [MCVE] (http://stackoverflow.com/help/mcve). В качестве бонуса это также достойная технология отладки, и вы можете найти проблему на этом пути. И нам, по крайней мере, нужно будет увидеть '/Agent/src/uslAgent.cc: 398'. – BoBTFish

+4

"* Я совершенно смущен, как простая строка вызывает крах. *" - Легко. Объект, содержащий строку, может быть недействительным. – PaulMcKenzie

+0

@BoBTFish Я почувствовал, что это связано с порядком декларации, поэтому я опубликовал весь класс, иначе для начала был снайпер. – punith

ответ

0

Я не думаю, что в этой точке должна быть какая-либо действительная причина для сбоя вашей программы - это предполагается;

  • Весь код был скомпилирован с тем же компилятором

  • файлы заголовков не скомпилированного по-разному в разных файлах (т.е. вы не забыли перекомпилировать что-то после того, как вы изменили файл заголовка).

Я думаю, что вы, скорее всего, имеете повреждение памяти в другом месте, и оно появляется (к несчастью) при доступе к этому классу. Попытайтесь использовать такой инструмент, как valgrind или аналогичный, чтобы отследить все, что плохо сделано остальной частью вашего кода.

 Смежные вопросы

  • Нет связанных вопросов^_^