diff options
| author | Rajesh Joseph <rjoseph@redhat.com> | 2016-01-25 01:33:48 +0530 | 
|---|---|---|
| committer | Raghavendra Talur <rtalur@redhat.com> | 2016-02-01 23:43:46 -0800 | 
| commit | 959785a885528f66c56e744641c71d1e7e2fadc8 (patch) | |
| tree | 8218e6cb56e5800ebf6c8e05acfec9ce069217b8 | |
| parent | 4267c14e1be513b6124ef0dca75029494844f711 (diff) | |
extras/devel-tool: Added gdb_macros for debugging
provided following functions in the script
1) print dictionary (dict_t) items
2) print list members (only address)
Change-Id: I5befb2dcdbf258ab3001ff25212a5862b9cc5321
Signed-off-by: Rajesh Joseph <rjoseph@redhat.com>
Reviewed-on: http://review.gluster.org/13289
Smoke: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra Talur <rtalur@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
| -rw-r--r-- | extras/devel-tools/gdb_macros | 84 | 
1 files changed, 84 insertions, 0 deletions
diff --git a/extras/devel-tools/gdb_macros b/extras/devel-tools/gdb_macros new file mode 100644 index 00000000000..aae4ccb3b37 --- /dev/null +++ b/extras/devel-tools/gdb_macros @@ -0,0 +1,84 @@ + +# +# gdb_macros is a gdb script file which can assist +# developer in debugging. This script provides +# following functions for debugging gluster processes +# effectively: +# +# pdict : This function will iterate through all the +#         dictionary (dict_t) members and print the +#         key-value pair. +# +# plist : This function will print address of each member +#         of gluster list (list_head). +# +# gdb script should be loaded in gdb before using these +# functions. gdb script can be loaded on-demand or on gdb +# start-up. Use the following command on gdb prompt for +# loading it on-demand. +#       source <script filename> +# e.g. +# (gdb) source /mnt/gdb_macros +# +# To automatically load gdb script on startup use .gdbinit +# file. This file is automatically loaded by gdb on start. +# Edit (or create) ~/.gdbinit file and add the following +# entry: +# source /mnt/gdb_macros +# + + + +# This is an internal helper function +define _print_dict_data +        set $data = ($arg0) +        set $len = $data->len - 1 +        set $i = 0 +        set $ishex = 0 +        while ($i < $len) +                set $ch = $data->data [$i] + +                # Print only alpha-numeric values as char +                # and remaining as hex value. This is done +                # in this way because using %s screws up +                # the display if the string has non-displayable +                # characters +                if ($ishex == 0) && ($ch > 31) && ($ch < 127) +                        printf "%c", $ch +                else +                        printf "%x", ($ch & 0xFF) +                        set $ishex = 1 +                end +                set $i = $i + 1 +        end +end + + +define pdict +        set $cnt = 1 +        set $temp = *($arg0->members) +        while ($temp) +                printf "[%d](%s::",$cnt, $temp->key +                _print_dict_data ($temp)->value +                printf ")\n" +                set $temp = $temp->next +                set $cnt = $cnt + 1 +        end +        printf "Done\n" +end + + +define plist +        set $node = &($arg0) +        set $head = $node + +        printf "[0x%lx]", $node +        set $node = $node->next + +        while ($node != $head) +                printf "--> [0x%lx]", $node +                set $node = $node->next +        end +        printf "\n" +end +  | 
