自建站 外贸,wordpress 提速插件,企业类展厅设计公司,制作网站的专业公司哪家好GDB中print方法并不能直接打印STL容器中保存的变量#xff0c;其实只要http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt这个文件保存为~/.gdbinit 就可以使用它提供的方法方便调试容器
指定启动文件#xff1a;~/.gdbinit#xff0c;下面的方法任选其一。…GDB中print方法并不能直接打印STL容器中保存的变量其实只要http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt这个文件保存为~/.gdbinit 就可以使用它提供的方法方便调试容器
指定启动文件~/.gdbinit下面的方法任选其一。 1、调用GDB时指定启动文件。
# gdb -command~/.gdbinit a.out 2、运行GDB后指定启动文件。 2.1、“source /.gdbinit”临时导入/.gdbinit文件。 2.2、添加“add-auto-load-safe-path /.gdbinit”到/.gdbinit文件中使该文件可以被加载; 2.3、添加“set auto-load safe-path ./”到./.gdbinit文件中相当于禁用了安全路径的保护
http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt内容如下
cat ~/.gdbinit
#
# STL GDB evaluators/views/utilities - 1.03
#
# The new GDB commands:
# are entirely non instrumental
# do not depend on any inline(s) - e.g. size(), [], etc
# are extremely tolerant to debugger settings
#
# This file should be included in .gdbinit as following:
# source stl-views.gdb or just paste it into your .gdbinit file
#
# The following STL containers are currently supported:
#
# std::vectorT -- via pvector command
# std::listT -- via plist or plist_member command
# std::mapT,T -- via pmap or pmap_member command
# std::multimapT,T -- via pmap or pmap_member command
# std::setT -- via pset command
# std::multisetT -- via pset command
# std::dequeT -- via pdequeue command
# std::stackT -- via pstack command
# std::queueT -- via pqueue command
# std::priority_queueT -- via ppqueue command
# std::bitsetn -- via pbitset command
# std::string -- via pstring command
# std::widestring -- via pwstring command
#
# The end of this file contains (optional) C beautifiers
# Make sure your debugger supports $argc
#
# Simple GDB Macros writen by Dan Marinescu (H-PhD) - License GPL
# Inspired by intial work of Tom Malnar,
# Tony Novac (PhD) / Cornell / Stanford,
# Gilad Mishne (PhD) and Many Many Others.
# Contact: dan_c_marinescuyahoo.com (Subject: STL)
#
# Modified to work with g 4.3 by Anders Elton
# Also added _member functions, that instead of printing the entire class in map, prints a member.#
# std::vector
#define pvectorif $argc 0help pvectorelseset $size $arg0._M_impl._M_finish - $arg0._M_impl._M_startset $capacity $arg0._M_impl._M_end_of_storage - $arg0._M_impl._M_startset $size_max $size - 1endif $argc 1set $i 0while $i $sizeprintf elem[%u]: , $ip *($arg0._M_impl._M_start $i)set $iendendif $argc 2set $idx $arg1if $idx 0 || $idx $size_maxprintf idx1, idx2 are not in acceptable range: [0..%u].\n, $size_maxelseprintf elem[%u]: , $idxp *($arg0._M_impl._M_start $idx)endendif $argc 3set $start_idx $arg1set $stop_idx $arg2if $start_idx $stop_idxset $tmp_idx $start_idxset $start_idx $stop_idxset $stop_idx $tmp_idxendif $start_idx 0 || $stop_idx 0 || $start_idx $size_max || $stop_idx $size_maxprintf idx1, idx2 are not in acceptable range: [0..%u].\n, $size_maxelseset $i $start_idxwhile $i $stop_idxprintf elem[%u]: , $ip *($arg0._M_impl._M_start $i)set $iendendendif $argc 0printf Vector size %u\n, $sizeprintf Vector capacity %u\n, $capacityprintf Element whatis $arg0._M_impl._M_startend
enddocument pvectorPrints std::vectorT information.Syntax: pvector vector idx1 idx2Note: idx, idx1 and idx2 must be in acceptable range [0..vector.size()-1].Examples:pvector v - Prints vector content, size, capacity and T typedefpvector v 0 - Prints element[idx] from vectorpvector v 1 2 - Prints elements in range [idx1..idx2] from vector
end #
# std::list
#define plistif $argc 0help plistelseset $head $arg0._M_impl._M_nodeset $current $arg0._M_impl._M_node._M_nextset $size 0while $current ! $headif $argc 2printf elem[%u]: , $sizep *($arg1*)($current 1)endif $argc 3if $size $arg2printf elem[%u]: , $sizep *($arg1*)($current 1)endendset $current $current._M_nextset $sizeendprintf List size %u \n, $sizeif $argc 1printf List whatis $arg0printf Use plist variable_name element_type to see the elements in the list.\nendend
enddocument plistPrints std::listT information.Syntax: plist list T idx: Prints list size, if T defined all elements or just element at idxExamples:plist l - prints list size and definitionplist l int - prints all elements and list sizeplist l int 2 - prints the third element in the list (if exists) and list size
enddefine plist_memberif $argc 0help plist_memberelseset $head $arg0._M_impl._M_nodeset $current $arg0._M_impl._M_node._M_nextset $size 0while $current ! $headif $argc 3printf elem[%u]: , $sizep (*($arg1*)($current 1)).$arg2endif $argc 4if $size $arg3printf elem[%u]: , $sizep (*($arg1*)($current 1)).$arg2endendset $current $current._M_nextset $sizeendprintf List size %u \n, $sizeif $argc 1printf List whatis $arg0printf Use plist_member variable_name element_type member to see the elements in the list.\nendend
enddocument plist_memberPrints std::listT information.Syntax: plist list T idx: Prints list size, if T defined all elements or just element at idxExamples:plist_member l int member - prints all elements and list sizeplist_member l int member 2 - prints the third element in the list (if exists) and list size
end#
# std::map and std::multimap
#define pmapif $argc 0help pmapelseset $tree $arg0set $i 0set $node $tree._M_t._M_impl._M_header._M_leftset $end $tree._M_t._M_impl._M_headerset $tree_size $tree._M_t._M_impl._M_node_countif $argc 1printf Map whatis $treeprintf Use pmap variable_name left_element_type right_element_type to see the elements in the map.\nendif $argc 3while $i $tree_sizeset $value (void *)($node 1)printf elem[%u].left: , $ip *($arg1*)$valueset $value $value sizeof($arg1)printf elem[%u].right: , $ip *($arg2*)$valueif $node._M_right ! 0set $node $node._M_rightwhile $node._M_left ! 0set $node $node._M_leftendelseset $tmp_node $node._M_parentwhile $node $tmp_node._M_rightset $node $tmp_nodeset $tmp_node $tmp_node._M_parentendif $node._M_right ! $tmp_nodeset $node $tmp_nodeendendset $iendendif $argc 4set $idx $arg3set $ElementsFound 0while $i $tree_sizeset $value (void *)($node 1)if *($arg1*)$value $idxprintf elem[%u].left: , $ip *($arg1*)$valueset $value $value sizeof($arg1)printf elem[%u].right: , $ip *($arg2*)$valueset $ElementsFoundendif $node._M_right ! 0set $node $node._M_rightwhile $node._M_left ! 0set $node $node._M_leftendelseset $tmp_node $node._M_parentwhile $node $tmp_node._M_rightset $node $tmp_nodeset $tmp_node $tmp_node._M_parentendif $node._M_right ! $tmp_nodeset $node $tmp_nodeendendset $iendprintf Number of elements found %u\n, $ElementsFoundendif $argc 5set $idx1 $arg3set $idx2 $arg4set $ElementsFound 0while $i $tree_sizeset $value (void *)($node 1)set $valueLeft *($arg1*)$valueset $valueRight *($arg2*)($value sizeof($arg1))if $valueLeft $idx1 $valueRight $idx2printf elem[%u].left: , $ip $valueLeftprintf elem[%u].right: , $ip $valueRightset $ElementsFoundendif $node._M_right ! 0set $node $node._M_rightwhile $node._M_left ! 0set $node $node._M_leftendelseset $tmp_node $node._M_parentwhile $node $tmp_node._M_rightset $node $tmp_nodeset $tmp_node $tmp_node._M_parentendif $node._M_right ! $tmp_nodeset $node $tmp_nodeendendset $iendprintf Number of elements found %u\n, $ElementsFoundendprintf Map size %u\n, $tree_sizeend
enddocument pmapPrints std::mapTLeft and TRight or std::multimapTLeft and TRight information. Works for std::multimap as well.Syntax: pmap map TtypeLeft TypeRight valLeft valRight: Prints map size, if T defined all elements or just element(s) with val(s)Examples:pmap m - prints map size and definitionpmap m int int - prints all elements and map sizepmap m int int 20 - prints the element(s) with left-value 20 (if any) and map sizepmap m int int 20 200 - prints the element(s) with left-value 20 and right-value 200 (if any) and map size
enddefine pmap_memberif $argc 0help pmap_memberelseset $tree $arg0set $i 0set $node $tree._M_t._M_impl._M_header._M_leftset $end $tree._M_t._M_impl._M_headerset $tree_size $tree._M_t._M_impl._M_node_countif $argc 1printf Map whatis $treeprintf Use pmap variable_name left_element_type right_element_type to see the elements in the map.\nendif $argc 5while $i $tree_sizeset $value (void *)($node 1)printf elem[%u].left: , $ip (*($arg1*)$value).$arg2set $value $value sizeof($arg1)printf elem[%u].right: , $ip (*($arg3*)$value).$arg4if $node._M_right ! 0set $node $node._M_rightwhile $node._M_left ! 0set $node $node._M_leftendelseset $tmp_node $node._M_parentwhile $node $tmp_node._M_rightset $node $tmp_nodeset $tmp_node $tmp_node._M_parentendif $node._M_right ! $tmp_nodeset $node $tmp_nodeendendset $iendendif $argc 6set $idx $arg5set $ElementsFound 0while $i $tree_sizeset $value (void *)($node 1)if *($arg1*)$value $idxprintf elem[%u].left: , $ip (*($arg1*)$value).$arg2set $value $value sizeof($arg1)printf elem[%u].right: , $ip (*($arg3*)$value).$arg4set $ElementsFoundendif $node._M_right ! 0set $node $node._M_rightwhile $node._M_left ! 0set $node $node._M_leftendelseset $tmp_node $node._M_parentwhile $node $tmp_node._M_rightset $node $tmp_nodeset $tmp_node $tmp_node._M_parentendif $node._M_right ! $tmp_nodeset $node $tmp_nodeendendset $iendprintf Number of elements found %u\n, $ElementsFoundendprintf Map size %u\n, $tree_sizeend
enddocument pmap_memberPrints std::mapTLeft and TRight or std::multimapTLeft and TRight information. Works for std::multimap as well.Syntax: pmap map TtypeLeft TypeRight valLeft valRight: Prints map size, if T defined all elements or just element(s) with val(s)Examples:pmap_member m class1 member1 class2 member2 - prints class1.member1 : class2.member2pmap_member m class1 member1 class2 member2 lvalue - prints class1.member1 : class2.member2 where class1 lvalue
end#
# std::set and std::multiset
#define psetif $argc 0help psetelseset $tree $arg0set $i 0set $node $tree._M_t._M_impl._M_header._M_leftset $end $tree._M_t._M_impl._M_headerset $tree_size $tree._M_t._M_impl._M_node_countif $argc 1printf Set whatis $treeprintf Use pset variable_name element_type to see the elements in the set.\nendif $argc 2while $i $tree_sizeset $value (void *)($node 1)printf elem[%u]: , $ip *($arg1*)$valueif $node._M_right ! 0set $node $node._M_rightwhile $node._M_left ! 0set $node $node._M_leftendelseset $tmp_node $node._M_parentwhile $node $tmp_node._M_rightset $node $tmp_nodeset $tmp_node $tmp_node._M_parentendif $node._M_right ! $tmp_nodeset $node $tmp_nodeendendset $iendendif $argc 3set $idx $arg2set $ElementsFound 0while $i $tree_sizeset $value (void *)($node 1)if *($arg1*)$value $idxprintf elem[%u]: , $ip *($arg1*)$valueset $ElementsFoundendif $node._M_right ! 0set $node $node._M_rightwhile $node._M_left ! 0set $node $node._M_leftendelseset $tmp_node $node._M_parentwhile $node $tmp_node._M_rightset $node $tmp_nodeset $tmp_node $tmp_node._M_parentendif $node._M_right ! $tmp_nodeset $node $tmp_nodeendendset $iendprintf Number of elements found %u\n, $ElementsFoundendprintf Set size %u\n, $tree_sizeend
enddocument psetPrints std::setT or std::multisetT information. Works for std::multiset as well.Syntax: pset set T val: Prints set size, if T defined all elements or just element(s) having valExamples:pset s - prints set size and definitionpset s int - prints all elements and the size of spset s int 20 - prints the element(s) with value 20 (if any) and the size of s
end#
# std::dequeue
#define pdequeueif $argc 0help pdequeueelseset $size 0set $start_cur $arg0._M_impl._M_start._M_curset $start_last $arg0._M_impl._M_start._M_lastset $start_stop $start_lastwhile $start_cur ! $start_stopp *$start_curset $start_curset $sizeendset $finish_first $arg0._M_impl._M_finish._M_firstset $finish_cur $arg0._M_impl._M_finish._M_curset $finish_last $arg0._M_impl._M_finish._M_lastif $finish_cur $finish_lastset $finish_stop $finish_curelseset $finish_stop $finish_lastendwhile $finish_first ! $finish_stopp *$finish_firstset $finish_firstset $sizeendprintf Dequeue size %u\n, $sizeend
enddocument pdequeuePrints std::dequeueT information.Syntax: pdequeue dequeue: Prints dequeue size, if T defined all elementsDeque elements are listed left to right (left-most stands for front and right-most stands for back)Example:pdequeue d - prints all elements and size of d
end#
# std::stack
#define pstackif $argc 0help pstackelseset $start_cur $arg0.c._M_impl._M_start._M_curset $finish_cur $arg0.c._M_impl._M_finish._M_curset $size $finish_cur - $start_curset $i $size - 1while $i 0p *($start_cur $i)set $i--endprintf Stack size %u\n, $sizeend
enddocument pstackPrints std::stackT information.Syntax: pstack stack: Prints all elements and size of the stackStack elements are listed top to buttom (top-most element is the first to come on pop)Example:pstack s - prints all elements and the size of s
end#
# std::queue
#define pqueueif $argc 0help pqueueelseset $start_cur $arg0.c._M_impl._M_start._M_curset $finish_cur $arg0.c._M_impl._M_finish._M_curset $size $finish_cur - $start_curset $i 0while $i $sizep *($start_cur $i)set $iendprintf Queue size %u\n, $sizeend
enddocument pqueuePrints std::queueT information.Syntax: pqueue queue: Prints all elements and the size of the queueQueue elements are listed top to bottom (top-most element is the first to come on pop)Example:pqueue q - prints all elements and the size of q
end#
# std::priority_queue
#define ppqueueif $argc 0help ppqueueelseset $size $arg0.c._M_impl._M_finish - $arg0.c._M_impl._M_startset $capacity $arg0.c._M_impl._M_end_of_storage - $arg0.c._M_impl._M_startset $i $size - 1while $i 0p *($arg0.c._M_impl._M_start $i)set $i--endprintf Priority queue size %u\n, $sizeprintf Priority queue capacity %u\n, $capacityend
enddocument ppqueuePrints std::priority_queueT information.Syntax: ppqueue priority_queue: Prints all elements, size and capacity of the priority_queuePriority_queue elements are listed top to buttom (top-most element is the first to come on pop)Example:ppqueue pq - prints all elements, size and capacity of pq
end#
# std::bitset
#define pbitsetif $argc 0help pbitsetelsep /t $arg0._M_wend
enddocument pbitsetPrints std::bitsetn information.Syntax: pbitset bitset: Prints all bits in bitsetExample:pbitset b - prints all bits in b
end#
# std::string
#define pstringif $argc 0help pstringelseprintf String \t\t\t \%s\\n, $arg0._M_data()printf String size/length \t %u\n, $arg0._M_rep()._M_lengthprintf String capacity \t %u\n, $arg0._M_rep()._M_capacityprintf String ref-count \t %d\n, $arg0._M_rep()._M_refcountend
enddocument pstringPrints std::string information.Syntax: pstring stringExample:pstring s - Prints content, size/length, capacity and ref-count of string s
end #
# std::wstring
#define pwstringif $argc 0help pwstringelsecall printf(WString \t\t \%ls\\n, $arg0._M_data())printf WString size/length \t %u\n, $arg0._M_rep()._M_lengthprintf WString capacity \t %u\n, $arg0._M_rep()._M_capacityprintf WString ref-count \t %d\n, $arg0._M_rep()._M_refcountend
enddocument pwstringPrints std::wstring information.Syntax: pwstring wstringExample:pwstring s - Prints content, size/length, capacity and ref-count of wstring s
end #
# C related beautifiers (optional)
#set print pretty on
set print object on
set print static-members on
set print vtbl on
set print demangle on
set demangle-style gnu-v3
set print sevenbit-strings off