⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pijl.txt

📁 用C++编的小程序。
💻 TXT
字号:
Debugging Standard Containers with GDB
by Herman Pijl


Listing 1

#include <vector>
#include <set>
#include <map>
#include <string>
using namespace std;

int main()
{
  vector<int> l_vec;
  l_vec.push_back(1);
  l_vec.push_back(2);

  set<int> l_set;        // breakpoint 1
  l_set.insert(3);
  l_set.insert(4);

  map<int, string> l_map;// breakpoint 2
  l_map[5] = "five";
  l_map[6] = "six";

  return 0;              // breakpoint 3
}


Listing 2:

template <typename T>
class vector
{
private:
  T *end_of_storage;
  T *start;
  T *finish;
  ... // other implementation details not relevant
};
 

Listing 3:

#########################################
define veclen
set $veclen = $arg0.finish - $arg0.start
end

document veclen
Set the variable $veclen to the length of the vector
end

#########################################
define pveclen
veclen $arg0
output $veclen
echo \n
end

document pveclen
Print the length of a vector
end


Listing 4:

#########################################
define pvecidx
output *($arg0.start + $arg1)
echo \n
end

document pvecidx
Print the i-th element of a vector
end

#########################################
define pvec
veclen $arg0
set $lloop = 0
while ($lloop < $veclen)
  pvecidx $arg0 $lloop
  set $lloop = $lloop + 1
end
end

document pvec
pvec varname
Print all the elements of a vector varname
example:
09  vector<int> l_vec;
10  l_vec.push_back(1);
11  l_vec.push_back(2);
(gdb) pvec l_vec
1
2
end



Listing 5:

struct rb_tree_node_base
{
  enum color_type {red, black};
  color_type color;
  rb_tree_node_base *parent;
  rb_tree_node_base *left;
  rb_tree_node_base *right;
};

template <typename T>
struct rb_tree_node: rb_tree_node_base
{
  T value_field;
};

template <typename T>
class rb_tree
{
private:
  rb_tree_node<T> *header;
  // and much more
};


Listing 6:

#########################################
define setlen
  set $setlen = $arg0.t.node_count
end

document setlen
Set the variable $setlen to the length of the set
end

#########################################
define psetlen
  setlen $arg0
  output $setlen
  echo \n
end

document psetlen
Print the length of a set
end

#########################################
# support functions to navigate through nodes
# parent 4
# left 8
# right 12
# value 16
set $cParentOffset = 4
set $cLeftOffset   = 8
set $cRightOffset  = 12
set $cValueOffset  = 16

# definitions of setleft, setright, setparent
# setbegin, setend, setminimum and setnext
# are left out to save space

#########################################
define pset
  setbegin $arg0
  set $setloop = $setbegin
  setend $arg0
  while ($setloop != $setend)
    output ($arg1 &)($setloop + $cValueOffset)
    echo \n
    setnext $setloop
    set $setloop = $setnext
  end
end

document pset
pset varname type
Print the elements of a set varname
example:
13  set<int> l_set;
14  l_set.insert(3);
15  l_set.insert(4);
(gdb) pset l_set int
3
4
end



Listing 7:

/* set */

template <typename T>
class set
{
public:
  iterator begin();
  // ...
};

/* set.cpp */
template <typename T>
iterator set<T>::begin()
{
  // some implementation
}

/* mysource.cpp */
#include <set>
void f()
{
  set<int> l_set;
  // ...
}
#include "set.cpp"
template class set<int>;


Listing 8:


#########################################
define pset
  set $settype = &$arg0.t.header->value_field
  set $settypep = &$settype
  setbegin $arg0
  set $setloop = $setbegin
  setend $arg0
  while ($setloop != $setend)
    set *$settypep = $setloop + $cValueOffset
    output **$settypep
    echo \n
    setnext $setloop
    set $setloop = $setnext
  end
end




1


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -