如何防止调试器进入codelite中的“@file ext/new_allocator.h”和“@file bits/vector.tcc”等头文件?

问题描述

这是我的代码。当我退出移动构造函数时,调试器会进入看起来很奇怪的函数(我是编程新手)和标准 c++ 库的 GNU 扩展文件

#include <iostream>
#include <vector>

using namespace std;

class Move {
private:
    int *data;
public:
    void set_data_value(int d) { *data = d; }
    int get_data_value() { return *data; }
    // Constructor
    Move(int d);
    // copy Constructor
    Move(const Move &source);
    Move(Move &&source);
    // Destructor
    ~Move();
};

 Move::Move(int d)  {
    data = new int;
    *data = d;
    cout << "Constructor for: " << d << endl;
}


Move::Move(const Move &source)
    : Move {*source.data} {
        cout << "copy constructor  - deep copy for: " << *data << endl;
}

//Move ctor
Move::Move(Move &&source) 
    : data {source.data} {
        source.data = nullptr;
        cout << "Move constructor - moving resource: " << *data << endl;
}

Move::~Move() {
    if (data != nullptr) {
        cout << "Destructor freeing data for: " << *data << endl;
    } else {
        cout << "Destructor freeing data for nullptr" << endl;
    }
    delete data;
}

int main(){
    vector<Move> vec;

    vec.push_back(Move{10});

    vec.push_back(Move{20});
    vec.push_back(Move{30});
    vec.push_back(Move{40});
     vec.push_back(Move{50});
    vec.push_back(Move{60});
    vec.push_back(Move{70});
    vec.push_back(Move{80});

    return 0;
}

我想避免使用这些文件函数,因为我还不知道它们是什么。你有什么解决方案吗?谢谢。

解决方法

阅读 GDB 的文档。使用 GCC 作为 g++ -Wall -Wextra -g

调用编译您的 C++ 代码

仔细阅读 GDB breakpoints,例如tbreak 命令。

请注意,GDB 和 GCC 都是 free software,您可以下载它们的源代码并研究然后改进它们的代码。

还可以从现有开源项目的源代码中获取灵感,例如 FLTKRefPerSysninja....

GDB 可以是 extended,GCC 可以是 extended,以及您的插件。

另请参阅 DECODER 项目(以及 GCC 之上的 Bismon 静态源代码分析器)和 Frama-C 静态分析器。如果有兴趣,请通过电子邮件与我联系 <basile.starynkevitch@cea.fr>

另见 this C++ reference 和一些 C++ 标准,如 n3337 或更好。

考虑使用 Clang static analyzer(您可以研究其源代码,因为它是开源的)。

注意 C++ rule of five

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...