diff options
author | Jonathan Earl Brassow <jbrassow@redhat.com> | 2011-03-14 18:05:56 +0000 |
---|---|---|
committer | Jonathan Earl Brassow <jbrassow@redhat.com> | 2011-03-14 18:05:56 +0000 |
commit | 547d3f13aba9b71871980ab7d060206707b4f6c4 (patch) | |
tree | 965d65b0eed8b5f271a286b309c79fd76b3082c9 /scripts/gdbinit | |
parent | b8ccce35009f45f7f05d1031f4e82aba3a35fc98 (diff) | |
download | lvm2-547d3f13aba9b71871980ab7d060206707b4f6c4.tar.gz lvm2-547d3f13aba9b71871980ab7d060206707b4f6c4.tar.xz lvm2-547d3f13aba9b71871980ab7d060206707b4f6c4.zip |
Watch out for collisions in GDB global namespace.
Better 'lv_status_r' printing.
Diffstat (limited to 'scripts/gdbinit')
-rw-r--r-- | scripts/gdbinit | 88 |
1 files changed, 65 insertions, 23 deletions
diff --git a/scripts/gdbinit b/scripts/gdbinit index 96000829..2ae3a752 100644 --- a/scripts/gdbinit +++ b/scripts/gdbinit @@ -28,6 +28,8 @@ printf "Use 'help <command>' for more info\n" printf "\n\n" printf "Popular breakpoints:\n" printf "break lv_extend\n" +printf "break check_lv_segments\n" +printf "break text_import_areas\n" printf "run --type raid1 -L 200M -n lv vg\n" printf "lv_status_r lv\n" printf "\n\n" @@ -46,10 +48,10 @@ set follow-fork-mode child # __first_seg <return> <LV> define __first_seg set $arg0 = 0x0 - set $_lv = (struct logical_volume *)$arg1 + set $_FS_lv = (struct logical_volume *)$arg1 - if ($_lv->segments.n != &$_lv->segments) - set $arg0 = (struct lv_segment *)$_lv->segments.n + if ($_FS_lv->segments.n != &$_FS_lv->segments) + set $arg0 = (struct lv_segment *)$_FS_lv->segments.n end end @@ -79,30 +81,30 @@ end # __seg_item <return> <seg> <index> define __seg_type set $arg0 = 0x0 - set $_seg = (struct lv_segment *)$arg1 - set $_index= $arg2 - set $_area = $_seg->areas[$_index] - set $_type = $_area.type + set $_ST_seg = (struct lv_segment *)$arg1 + set $_ST_index= $arg2 + set $_ST_area = $_ST_seg->areas[$_ST_index] + set $_ST_type = $_ST_area.type - set $arg0 = $_type + set $arg0 = $_ST_type end # # __seg_item <return> <seg> <index> define __seg_item set $arg0 = 0x0 - set $_seg = (struct lv_segment *)$arg1 - set $_index= $arg2 + set $_SI_seg = (struct lv_segment *)$arg1 + set $_SI_index= $arg2 - if ($_index < $_seg->area_count) - set $_area = $_seg->areas[$_index] - set $_type = $_area.type + if ($_SI_index < $_SI_seg->area_count) + set $_SI_area = $_SI_seg->areas[$_SI_index] + set $_SI_type = $_SI_area.type - if ($_type == AREA_PV) - set $arg0 = $_area.u.pv.pvseg->pv + if ($_SI_type == AREA_PV) + set $arg0 = $_SI_area.u.pv.pvseg->pv else - if ($_type == AREA_LV) - set $arg0 = $_area.u.lv.lv + if ($_SI_type == AREA_LV) + set $arg0 = $_SI_area.u.lv.lv end end end @@ -197,10 +199,38 @@ define __status end end +# +# __print_indent <num indents> [No marks] +define __print_indent + set $_PI_indent = $arg0 + set $_PI_lead_mark = 0 + + while ($_PI_indent) + if ($_PI_indent == 1) + if ($argc > 1) + if ($_PI_lead_mark) + printf " " + else + printf "| " + end + else + printf "|-----> " + end + else + printf "| " + set $_PI_lead_mark = 1 + end + set $_PI_indent-- + end +end + define lv_status # Use __lv because we don't want to overwrite higher functions set $__lv = (struct logical_volume *)$arg0 + if ($argc == 2) + __print_indent $arg1 + end printf "%s->status:", $__lv->name __status $__lv printf "\n" @@ -215,6 +245,9 @@ end define seg_status set $_seg=(struct lv_segment *)$arg0 + if ($argc == 2) + __print_indent $arg1 1 + end printf "[ (%s) seg->status:", $_seg->lv->name __status $_seg printf " ]\n" @@ -223,7 +256,7 @@ end document seg_status Display the flags that are set on an lv_segment. - Usage: lv_status <(struct lv_segment *)> + Usage: seg_status <(struct lv_segment *)> end # @@ -338,8 +371,8 @@ define __lv_status_r set $_s = $_lv->segments.n set $_area_index = 0 - printf "\n" - lv_status $_lv +# printf "\n" + lv_status $_lv $indent else set $_seg = (struct lv_segment *)$arg1 @@ -364,20 +397,28 @@ define __lv_status_r set $_type = 0x0 if (!$_area_index) - seg_status $_seg + seg_status $_seg $indent end __seg_type $_type $_seg $_area_index if ($_type == AREA_LV) + set $indent++ __seg_item $_lv $_seg $_area_index __lv_status_r $_lv else if ($_seg->log_lv) - printf "[LOG OF %s] ", $_lv->name - lv_status $_seg->log_lv + set $indent++ + set $_log_seg = 0x0 + + __first_seg $_log_seg $_seg->log_lv + lv_status $_seg->log_lv $indent + seg_status $_log_seg $indent + + set $indent-- end __get_only_segment_using_this_lv $_seg $_lv if ($_seg) + set $indent-- __lv_status_r $_lv $_seg end end @@ -385,6 +426,7 @@ define __lv_status_r end define lv_status_r + set $indent = 0 __lv_status_r $arg0 end |