]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/gdbinit.in
c++: Handle multiple aggregate overloads [PR95319].
[thirdparty/gcc.git] / gcc / gdbinit.in
index e8d10e236c4213409d15651039c789e6a7a1364e..e951c19db638f10d18ce4f4b34e436681410bc6e 100644 (file)
+# Copyright (C) 2001-2020 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+define help-gcc-hooks
+help help-gcc-hooks
+end
+
+document help-gcc-hooks
+GCC gdbinit file introduces several debugging shorthands:
+
+    pr [rtx], prl [rtx], prc [rtx], pi [rtx_insn],
+    pt [tree], pct [tree], ptc [tree], trt [tree],
+    pgs [tree], pge [tree], pdn [tree], ptn [tree],
+    pgg [gimple], pgq [gimple_seq],
+    pmz [mpz_t],
+    pdd [dw_die_ref],
+    pbm [bitmap],
+    pel [location_t],
+    pp, pbs, pcfun
+
+They are generally implemented by calling a function that prints to stderr,
+and therefore will not work when the compiler is not executing.
+
+Most shorthands accept an optional argument. When it is not supplied,
+they use value in GDB register $, i.e. the last printed value.
+end
+
+define pp
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug ($debug_arg)
+end
+
+document pp
+GCC hook: pp [any]
+Print a representation of any GCC data structure for which an instance of
+overloaded function 'debug' is available.
+See also 'help-gcc-hooks'.
+end
+
 define pr
-set debug_rtx ($)
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_rtx ($debug_arg)
 end
 
 document pr
-Print the full structure of the rtx that is $.
-Works only when an inferior is executing.
+GCC hook: pr [rtx]
+Print the full structure of given rtx.
+See also 'help-gcc-hooks'.
 end
 
 define prl
-set debug_rtx_list ($, debug_rtx_count)
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_rtx_list ($debug_arg, debug_rtx_count)
 end
 
 document prl
-Print the full structure of all rtx insns beginning at $.
-Works only when an inferior is executing.
+GCC hook: prl [rtx]
+Print the full structure of all rtx insns beginning at given rtx.
 Uses variable debug_rtx_count to control number of insns printed:
-  debug_rtx_count > 0: print from $ on.
-  debug_rtx_count < 0: print a window around $.
+  debug_rtx_count > 0: print from given rtx on.
+  debug_rtx_count < 0: print a window around given rtx.
 
 There is also debug_rtx_find (rtx, uid) that will scan a list for UID and print
 it using debug_rtx_list. Usage example: set $foo=debug_rtx_find(first, 42)
 end
 
 define pt
-set debug_tree ($)
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_tree ($debug_arg)
 end
 
 document pt
-Print the full structure of the tree that is $.
-Works only when an inferior is executing.
+GCC hook: pt [tree]
+Print the full structure of given tree.
+See also 'help-gcc-hooks'.
 end
 
 define pct
-set debug_c_tree ($)
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_c_tree ($debug_arg)
 end
 
 document pct
-Print the tree that is $ in C syntax.
-Works only when an inferior is executing.
+GCC hook: pct [tree]
+Print given tree in C syntax.
+See also 'help-gcc-hooks'.
+end
+
+define pgg
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_gimple_stmt ($debug_arg)
+end
+
+document pgg
+GCC hook: pgg [gimple]
+Print given GIMPLE statement in C syntax.
+See also 'help-gcc-hooks'.
+end
+
+define pgq
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_gimple_seq ($debug_arg)
+end
+
+document pgq
+GCC hook: pgq [gimple_seq]
+Print given GIMPLE sequence in C syntax.
+See also 'help-gcc-hooks'.
 end
 
 define pgs
-set debug_generic_stmt ($)
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_generic_stmt ($debug_arg)
 end
 
 document pgs
-Print the statement that is $ in C syntax.
-Works only when an inferior is executing.
+GCC hook: pgs [tree]
+Print given GENERIC statement in C syntax.
+See also 'help-gcc-hooks'.
 end
 
 define pge
-set debug_generic_expr ($)
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_generic_expr ($debug_arg)
 end
 
 document pge
-Print the expression that is $ in C syntax.
-Works only when an inferior is executing.
+GCC hook: pge [tree]
+Print given GENERIC expression in C syntax.
+See also 'help-gcc-hooks'.
+end
+
+define pmz
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call mpz_out_str(stderr, 10, $debug_arg)
+end
+
+document pmz
+GCC hook: pmz [mpz_t]
+Print given mpz value.
+See also 'help-gcc-hooks'.
 end
 
 define ptc
-output (enum tree_code) $.common.code
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+output (enum tree_code) $debug_arg.base.code
 echo \n
 end
 
 document ptc
-Print the tree-code of the tree node that is $.
+GCC hook: ptc [tree]
+Print the tree-code of given tree node.
+See also 'help-gcc-hooks'.
 end
 
 define pdn
-output $.decl_minimal.name->identifier.id.str
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+output $debug_arg.decl_minimal.name->identifier.id.str
 echo \n
 end
 
 document pdn
-Print the name of the decl-node that is $.
+GCC hook: pdn [tree]
+Print the name of given decl-node.
+See also 'help-gcc-hooks'.
 end
 
 define ptn
-output $.type.name->decl_minimal.name->identifier.id.str
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+output $debug_arg.type.name->decl_minimal.name->identifier.id.str
 echo \n
 end
 
 document ptn
-Print the name of the type-node that is $.
+GCC hook: ptn [tree]
+Print the name of given type-node.
+See also 'help-gcc-hooks'.
+end
+
+define pdd
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call debug_dwarf_die ($debug_arg)
+end
+
+document pdd
+GCC hook: pdd [dw_die_ref]
+Print given dw_die_ref.
+See also 'help-gcc-hooks'.
 end
 
 define prc
-output (enum rtx_code) $.code
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+output (enum rtx_code) $debug_arg.code
 echo \ (
-output $.mode
+output $debug_arg.mode
 echo )\n
 end
 
 document prc
-Print the rtx-code and machine mode of the rtx that is $.
+GCC hook: prc [rtx]
+Print the rtx-code and machine mode of given rtx.
+See also 'help-gcc-hooks'.
 end
 
 define pi
-print $.u.fld[0].rt_rtx@7
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+print $debug_arg.u.fld[0].rt_rtx@7
 end
 
 document pi
-Print the fields of an instruction that is $.
+GCC hook: pi [rtx_insn]
+Print the fields of given RTL instruction.
+See also 'help-gcc-hooks'.
 end
 
 define pbs
-set print_binding_stack ()
+call print_binding_stack ()
 end
 
 document pbs
@@ -113,22 +237,95 @@ In cc1plus, print the current binding stack, frame by frame, up to and
 including the global binding level.
 end
 
-define pbb
-set dump_bb ($, stderr, 0)
+define pbm
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+call bitmap_print (stderr, $debug_arg, "", "\n")
 end
 
-document pbb
-Dump the basic block that is in $, including rtx.
+document pbm
+GCC hook: pbm [bitmap]
+Dump given bitmap as a comma-separated list of numbers.
+See also 'help-gcc-hooks'.
 end
 
-define pbm
-set bitmap_print (stderr, $, "", "\n")
+define pel
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+output expand_location ($debug_arg)
+echo \n
 end
 
-document pbm
-Dump the bitmap that is in $ as a comma-separated list of numbers.
+document pel
+GCC hook: pel [location_t]
+Print given location.
+See also 'help-gcc-hooks'.
 end
 
+define pcfun
+output debug_function (cfun ? cfun->decl : current_function_decl, 0)
+echo \n
+end
+
+document pcfun
+Print current function.
+end
+
+define trt
+eval "set $debug_arg = $%s", $argc ? "arg0" : ""
+print ($debug_arg.typed.type)
+end
+
+document trt
+GCC hook: trt [tree]
+Print TREE_TYPE of given tree node.
+See also 'help-gcc-hooks'.
+end
+
+define break-on-diagnostic
+break diagnostic_show_locus
+end
+
+document break-on-diagnostic
+Put a breakpoint on diagnostic_show_locus, called whenever a diagnostic
+is emitted (as opposed to those warnings that are suppressed by
+command-line options).
+end
+
+define break-on-saved-diagnostic
+break ana::diagnostic_manager::add_diagnostic
+end
+
+document break-on-saved-diagnostic
+Put a breakpoint on ana::diagnostic_manager::add_diagnostic, called within
+the analyzer whenever a diagnostic is saved for later de-duplication and
+possible emission.
+end
+
+define reload-gdbhooks
+python import imp; imp.reload(gdbhooks)
+end
+
+document reload-gdbhooks
+Load the gdbhooks.py module again in order to pick up any changes made to it.
+end
+
+alias rh = reload-gdbhooks
+
+# Define some macros helpful to gdb when it is expanding macros.
+macro define __FILE__ "gdb"
+macro define __LINE__ 1
+macro define __FUNCTION__ "gdb"
+macro define __null 0
+macro define input_line expand_location(input_location).line
+macro define input_filename expand_location(input_location).file
+
+# Remember previous pagination status and turn it off, so that
+# the messages for skip commands don't require pagination.
+python __gcc_prev_pagination=gdb.parameter("pagination")
+set pagination off
+
+# Gracefully handle aborts in functions used from gdb.
+set unwindonsignal on
+
 # Put breakpoints at exit and fancy_abort in case abort is mapped
 # to either fprintf/exit or fancy_abort.
 b fancy_abort
@@ -143,3 +340,46 @@ set complaints 0
 # USE_SYSTEM_ABORT is defined, so gdb may complain and bail out.
 b exit
 b abort
+
+# Disable strict type checking.  This allows developers to (for example)
+# make inferior calls without casting absolute address to a suitable
+# pointer type.
+set check type off
+
+# Skip all inline functions in tree.h.
+# These are used in accessor macros.
+# Note that this is added at the end because older gdb versions
+# do not understand the 'skip' command.
+# See https://sourceware.org/gdb/current/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html
+skip file tree.h
+
+# Also skip inline functions in is-a.h.
+skip file is-a.h
+
+# And line-map.h.
+skip file line-map.h
+
+# And timevar.h.
+skip file timevar.h
+
+# Likewise, skip various inline functions in rtl.h.
+skip rtx_expr_list::next
+skip rtx_expr_list::element
+skip rtx_insn_list::next
+skip rtx_insn_list::insn
+skip rtx_sequence::len
+skip rtx_sequence::element
+skip rtx_sequence::insn
+skip INSN_UID
+skip PREV_INSN
+skip SET_PREV_INSN
+skip NEXT_INSN
+skip SET_NEXT_INSN
+skip BLOCK_FOR_INSN
+skip PATTERN
+skip INSN_LOCATION
+skip INSN_HAS_LOCATION
+skip JUMP_LABEL_AS_INSN
+
+# Restore pagination to the previous state.
+python if __gcc_prev_pagination: gdb.execute("set pagination on")