diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Modellbildung_und_Simulation/Aufgabenblatt3/MLP/.gdbinitlinux | |
| download | Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2 | |
Diffstat (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt3/MLP/.gdbinitlinux')
| -rw-r--r-- | Master/Modellbildung_und_Simulation/Aufgabenblatt3/MLP/.gdbinitlinux | 579 |
1 files changed, 579 insertions, 0 deletions
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt3/MLP/.gdbinitlinux b/Master/Modellbildung_und_Simulation/Aufgabenblatt3/MLP/.gdbinitlinux new file mode 100644 index 0000000..c87de4f --- /dev/null +++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt3/MLP/.gdbinitlinux @@ -0,0 +1,579 @@ +# +# STL GDB evaluators/views/utilities +# +# 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::vector<T> -- via pvector command +# std::list<T> -- via plist command +# std::map<T,T> -- via pmap command +# std::multimap<T,T> -- via pmap command +# std::set<T> -- via pset command +# std::multiset<T> -- via pset command +# std::deque<T> -- via pdequeue command +# std::stack<T> -- via pstack command +# std::queue<T> -- via pqueue command +# std::priority_queue<T> -- via ppqueue command +# std::bitset<n> -- 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_marinescu@yahoo.com (Subject: STL) +# + + + +# +# std::vector<> +# + +define pvector + if $argc == 0 + help pvector + else + set $size = $arg0._M_impl._M_finish - $arg0._M_impl._M_start + set $capacity = $arg0._M_impl._M_end_of_storage - $arg0._M_impl._M_start + set $size_max = $size - 1 + end + if $argc == 1 + set $i = 0 + while $i < $size + printf "elem[%u]: ", $i + p *($arg0._M_impl._M_start + $i) + set $i++ + end + end + if $argc == 2 + set $idx = $arg1 + if $idx < 0 || $idx > $size_max + printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max + else + printf "elem[%u]: ", $idx + p *($arg0._M_impl._M_start + $idx) + end + end + if $argc == 3 + set $start_idx = $arg1 + set $stop_idx = $arg2 + if $start_idx > $stop_idx + set $tmp_idx = $start_idx + set $start_idx = $stop_idx + set $stop_idx = $tmp_idx + end + if $start_idx < 0 || $stop_idx < 0 || $start_idx > $size_max || $stop_idx > $size_max + printf "idx1, idx2 are not in acceptable range: [0..%u].\n", $size_max + else + set $i = $start_idx + while $i <= $stop_idx + printf "elem[%u]: ", $i + p *($arg0._M_impl._M_start + $i) + set $i++ + end + end + end + if $argc > 0 + printf "Vector size = %u\n", $size + printf "Vector capacity = %u\n", $capacity + printf "Element " + whatis $arg0._M_impl._M_start + end +end + +document pvector + Prints std::vector<T> information. + Syntax: pvector <vector> <idx1> <idx2> + Note: idx, idx1 and idx2 must be in acceptable range [0..<vector>.size()-1]. + Examples: + pvector v - Prints vector content, size, capacity and T typedef + pvector v 0 - Prints element[idx] from vector + pvector v 1 2 - Prints elements in range [idx1..idx2] from vector +end + + + +# +# std::list<> +# + +define plist + if $argc == 0 + help plist + else + set $head = &$arg0._M_impl._M_node + set $current = $arg0->_M_impl->_M_node->_M_next + set $size = 0 + while $current != $head + if $argc == 2 + printf "elem[%u]: ", $size + p *($arg1*)($current + 1) + end + if $argc == 3 + if $size == $arg2 + printf "elem[%u]: ", $size + p *($arg1*)($current + 1) + end + end + set $current = $current->_M_next + set $size++ + end + printf "List size = %u \n", $size + if $argc == 1 + printf "List " + whatis $arg0 + printf "Use plist <variable_name> <element_type> to see the elements in the list.\n" + end + end +end + +document plist + Prints std::list<T> information. + Syntax: plist <list> <T> <idx>: Prints list size, if T defined all elements or just element at idx + Examples: + plist l - prints list size and definition + plist l int - prints all elements and list size + plist l int 2 - prints the third element in the list (if exists) and list size +end + + + +# +# std::map and std::multimap +# + +define pmap + if $argc == 0 + help pmap + else + set $tree = $arg0 + set $i = 0 + set $node = $tree->_M_t->_M_impl->_M_header->_M_left + set $end = $tree->_M_t->_M_impl->_M_header + set $tree_size = $tree->_M_t->_M_impl->_M_node_count + if $argc == 1 + printf "Map " + whatis $tree + printf "Use pmap <variable_name> <left_element_type> <right_element_type> to see the elements in the map.\n" + end + if $argc == 3 + while $i < $tree_size + set $value = (void *)($node + 1) + printf "elem[%u]->left: ", $i + p *($arg1*)$value + set $value = $value + 4 + printf "elem[%u]->right: ", $i + p *($arg2*)$value + if $node->_M_right != 0 + set $node = $node->_M_right + while $node->_M_left != 0 + set $node = $node->_M_left + end + else + set $tmp_node = $node->_M_parent + while $node == $tmp_node->_M_right + set $node = $tmp_node + set $tmp_node = $tmp_node->_M_parent + end + if $node->_M_right != $tmp_node + set $node = $tmp_node + end + end + set $i++ + end + end + if $argc == 4 + set $idx = $arg3 + set $ElementsFound = 0 + while $i < $tree_size + set $value = (void *)($node + 1) + if *($arg1*)$value == $idx + printf "elem[%u]->left: ", $i + p *($arg1*)$value + set $value = $value + 4 + printf "elem[%u]->right: ", $i + p *($arg2*)$value + set $ElementsFound++ + end + if $node->_M_right != 0 + set $node = $node->_M_right + while $node->_M_left != 0 + set $node = $node->_M_left + end + else + set $tmp_node = $node->_M_parent + while $node == $tmp_node->_M_right + set $node = $tmp_node + set $tmp_node = $tmp_node->_M_parent + end + if $node->_M_right != $tmp_node + set $node = $tmp_node + end + end + set $i++ + end + printf "Number of elements found = %u\n", $ElementsFound + end + if $argc == 5 + set $idx1 = $arg3 + set $idx2 = $arg4 + set $ElementsFound = 0 + while $i < $tree_size + set $value = (void *)($node + 1) + set $valueLeft = *($arg1*)$value + set $valueRight = *($arg2*)($value + 4) + if $valueLeft == $idx1 && $valueRight == $idx2 + printf "elem[%u]->left: ", $i + p $valueLeft + printf "elem[%u]->right: ", $i + p $valueRight + set $ElementsFound++ + end + if $node->_M_right != 0 + set $node = $node->_M_right + while $node->_M_left != 0 + set $node = $node->_M_left + end + else + set $tmp_node = $node->_M_parent + while $node == $tmp_node->_M_right + set $node = $tmp_node + set $tmp_node = $tmp_node->_M_parent + end + if $node->_M_right != $tmp_node + set $node = $tmp_node + end + end + set $i++ + end + printf "Number of elements found = %u\n", $ElementsFound + end + printf "Map size = %u\n", $tree_size + end +end + +document pmap + Prints std::map<TLeft and TRight> or std::multimap<TLeft 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 definition + pmap m int int - prints all elements and map size + pmap m int int 20 - prints the element(s) with left-value = 20 (if any) and map size + pmap m int int 20 200 - prints the element(s) with left-value = 20 and right-value = 200 (if any) and map size +end + + + +# +# std::set and std::multiset +# + +define pset + if $argc == 0 + help pset + else + set $tree = $arg0 + set $i = 0 + set $node = $tree->_M_t->_M_impl->_M_header->_M_left + set $end = $tree->_M_t->_M_impl->_M_header + set $tree_size = $tree->_M_t->_M_impl->_M_node_count + if $argc == 1 + printf "Set " + whatis $tree + printf "Use pset <variable_name> <element_type> to see the elements in the set.\n" + end + if $argc == 2 + while $i < $tree_size + set $value = (void *)($node + 1) + printf "elem[%u]: ", $i + p *($arg1*)$value + if $node->_M_right != 0 + set $node = $node->_M_right + while $node->_M_left != 0 + set $node = $node->_M_left + end + else + set $tmp_node = $node->_M_parent + while $node == $tmp_node->_M_right + set $node = $tmp_node + set $tmp_node = $tmp_node->_M_parent + end + if $node->_M_right != $tmp_node + set $node = $tmp_node + end + end + set $i++ + end + end + if $argc == 3 + set $idx = $arg2 + set $ElementsFound = 0 + while $i < $tree_size + set $value = (void *)($node + 1) + if *($arg1*)$value == $idx + printf "elem[%u]: ", $i + p *($arg1*)$value + set $ElementsFound++ + end + if $node->_M_right != 0 + set $node = $node->_M_right + while $node->_M_left != 0 + set $node = $node->_M_left + end + else + set $tmp_node = $node->_M_parent + while $node == $tmp_node->_M_right + set $node = $tmp_node + set $tmp_node = $tmp_node->_M_parent + end + if $node->_M_right != $tmp_node + set $node = $tmp_node + end + end + set $i++ + end + printf "Number of elements found = %u\n", $ElementsFound + end + printf "Set size = %u\n", $tree_size + end +end + +document pset + Prints std::set<T> or std::multiset<T> 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 val + Examples: + pset s - prints set size and definition + pset s int - prints all elements and the size of s + pset s int 20 - prints the element(s) with value = 20 (if any) and the size of s +end + + + +# +# std::dequeue +# + +define pdequeue + if $argc == 0 + help pdequeue + else + set $size = 0 + set $start_cur = $arg0._M_impl._M_start._M_cur + set $start_last = $arg0._M_impl._M_start._M_last + set $start_stop = $start_last + while $start_cur != $start_stop + p *$start_cur + set $start_cur++ + set $size++ + end + set $finish_first = $arg0._M_impl._M_finish._M_first + set $finish_cur = $arg0._M_impl._M_finish._M_cur + set $finish_last = $arg0._M_impl._M_finish._M_last + if $finish_cur < $finish_last + set $finish_stop = $finish_cur + else + set $finish_stop = $finish_last + end + while $finish_first != $finish_stop + p *$finish_first + set $finish_first++ + set $size++ + end + printf "Dequeue size = %u\n", $size + end +end + +document pdequeue + Prints std::dequeue<T> information. + Syntax: pdequeue <dequeue>: Prints dequeue size, if T defined all elements + Deque 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 pstack + if $argc == 0 + help pstack + else + set $start_cur = $arg0.c._M_impl._M_start._M_cur + set $finish_cur = $arg0.c._M_impl._M_finish._M_cur + set $size = $finish_cur - $start_cur + set $i = $size - 1 + while $i >= 0 + p *($start_cur + $i) + set $i-- + end + printf "Stack size = %u\n", $size + end +end + +document pstack + Prints std::stack<T> information. + Syntax: pstack <stack>: Prints all elements and size of the stack + Stack 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 pqueue + if $argc == 0 + help pqueue + else + set $start_cur = $arg0.c._M_impl._M_start._M_cur + set $finish_cur = $arg0.c._M_impl._M_finish._M_cur + set $size = $finish_cur - $start_cur + set $i = 0 + while $i < $size + p *($start_cur + $i) + set $i++ + end + printf "Queue size = %u\n", $size + end +end + +document pqueue + Prints std::queue<T> information. + Syntax: pqueue <queue>: Prints all elements and the size of the queue + Queue 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 ppqueue + if $argc == 0 + help ppqueue + else + set $size = $arg0.c._M_impl._M_finish - $arg0.c._M_impl._M_start + set $capacity = $arg0.c._M_impl._M_end_of_storage - $arg0.c._M_impl._M_start + set $i = $size - 1 + while $i >= 0 + p *($arg0.c._M_impl._M_start + $i) + set $i-- + end + printf "Priority queue size = %u\n", $size + printf "Priority queue capacity = %u\n", $capacity + end +end + +document ppqueue + Prints std::priority_queue<T> information. + Syntax: ppqueue <priority_queue>: Prints all elements, size and capacity of the priority_queue + Priority_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 pbitset + if $argc == 0 + help pbitset + else + p /t $arg0._M_w + end +end + +document pbitset + Prints std::bitset<n> information. + Syntax: pbitset <bitset>: Prints all bits in bitset + Example: + pbitset b - prints all bits in b +end + + + +# +# std::string +# + +define pstring + if $argc == 0 + help pstring + else + printf "String \t\t\t= \"%s\"\n", $arg0._M_data() + printf "String size/length \t= %u\n", $arg0._M_rep()->_M_length + printf "String capacity \t= %u\n", $arg0._M_rep()->_M_capacity + printf "String ref-count \t= %d\n", $arg0._M_rep()->_M_refcount + end +end + +document pstring + Prints std::string information. + Syntax: pstring <string> + Example: + pstring s - Prints content, size/length, capacity and ref-count of string s +end + + + +# +# std::wstring +# + +define pwstring + if $argc == 0 + help pwstring + else + call printf("WString \t\t= \"%ls\"\n", $arg0._M_data()) + printf "WString size/length \t= %u\n", $arg0._M_rep()->_M_length + printf "WString capacity \t= %u\n", $arg0._M_rep()->_M_capacity + printf "WString ref-count \t= %d\n", $arg0._M_rep()->_M_refcount + end +end + +document pwstring + Prints std::wstring information. + Syntax: pwstring <wstring> + Example: + 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 + |
