zoukankan      html  css  js  c++  java
  • 如何寻找bug(4)

    上周找到在FragmentRequest的析构函数时,由于m_deleteChannelVector为0,没有进入if语句进行删除操作。

    m_deleteChannelVector 这个变量在整个FragmentRequest类里面只出现了两次: 构造函数初始化和析构函数里。
     70 FragmentRequest::FragmentRequest(const unsigned int level1Id,
     71                                  std::vector<DataChannel*>* dataChannel,
     72                                  bool deleteChannelVector,
     73                                  bool doMonitoring,
     74                                  bool doRelease,
     75                                  FragmentBuilder* builder,
     76                                  const NodeID destination,
     77                                  const unsigned int transactionId,
     78                                  DFOutputQueue<unsigned int>* releaseQueue) :
     79    Request(dataChannel),
     80    m_deleteChannelVector(deleteChannelVector),
     81    m_doMonitoring(doMonitoring),
     82    m_doRelease(doRelease),
     83    m_builder(builder),
     84    m_level1Id(level1Id),
     85    m_transactionId(transactionId),
     86    m_destination(destination),
     87    m_releaseQueue(releaseQueue)
     88 {
     89    m_eventFragment = 0;
     90 }
     91 
     92 FragmentRequest::~FragmentRequest() {
     93   std::cout << "~FragmentRequest" << std::endl;
     94   if (m_deleteChannelVector) {
     95     delete m_dataChannels;
     96   }
     97 }

    所以,要找到Request初始化的地方。Request在使用时是从requestQueue里pop出来一个,然后执行和删除的。

    在IOManager.cpp里面应该有request的push操作。

    (批注:要找Request初始化的地方是正确的思路,但是找法是有一些问题。应该在tdaq总目录下查找,最终发现Request的初始化是在ROSIO包里,而且Request还有连个子类。)



  • 相关阅读:
    面向对象之继承
    面向对象
    Python—文件和内建函数 open(),file()
    如何在命令行打开文件夹?
    Anaconda在win10下的安装
    Python—for循环和range()内建函数
    python—基础练习2
    python—数据类型
    python—字符编码
    python—基础练习1
  • 原文地址:https://www.cnblogs.com/zengtx/p/6396359.html
Copyright © 2011-2022 走看看