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还有连个子类。)



  • 相关阅读:
    抽象类与抽象方法
    简单工厂模式
    面向对象的七种基本设计原则
    HashTable集合遍历的三种方法
    继承(父类为虚方法以及子类的重写)
    继承(is与as)
    Chrome OS 更新新版本可让Linux访问USB连接的Android设备
    谷歌对Intel 10nm进度不满
    盖茨对没能做好手机系统对抗苹果表示遗憾
    微软内部封杀 Slack
  • 原文地址:https://www.cnblogs.com/zengtx/p/6396359.html
Copyright © 2011-2022 走看看