User Tools

Site Tools


gdb

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
gdb [2024/12/10 13:42] keremetgdb [2024/12/17 20:24] (current) keremet
Line 2: Line 2:
  
 Официальный сайт https://www.sourceware.org/gdb/ Официальный сайт https://www.sourceware.org/gdb/
 +
 +  git clone https://sourceware.org/git/binutils-gdb.git
 +  cd binutils-gdb
 +  git checkout gdb-15.2-release
 +
 +Пропатченная версия
 +  git clone https://github.com/keremet/binutils-gdb -b gpdb6
  
 Компиляция Компиляция
  
-  wget https://ftp.gnu.org/gnu/gdb/gdb-15.2.tar.xz +  cd binutils-gdb
-  tar xf gdb-15.2.tar.xz  +
-  cd gdb-15.2+
   ./configure --prefix=/usr/local/gdb   ./configure --prefix=/usr/local/gdb
   make   make
   sudo make install   sudo make install
 +
 +
 +lookup_cmd() - поиск по списку cmdlist \\
 +execute_command() \\
 +command_handler()
 +
 +
 +при обработке команд call и print вызывается функция print_command_1() из нее вызывается value_print(), а из нее - apply_ext_lang_val_pretty_printer() и c_value_print_inner()
 +
 +
 +Для тестирования
 +  b exec_simple_query
 +  print *parsetree_list 
 +  b ExecProcNode
 +  p node->ps->plan
 +----------
 +еще вариант, но он не работает с IDE
 +
 +  void
 +  cp_print_value_fields (struct value *val, struct ui_file *stream,
 +        int recurse, const struct value_print_options *options,
 +        struct type **dont_print_vb,
 +        int dont_print_statmem)
 +  {
 +  int i, len, n_baseclasses;
 +  int fields_seen = 0;
 +  static int last_set_recurse = -1;
 +  
 +  struct type *type = check_typedef (val->type ());
 +  
 +  if (type->code () == TYPE_CODE_STRUCT && type->num_fields () > 0 
 +       && strcmp(type->field (0).name (), "type") == 0
 +       && strcmp(type->field (0).type ()->name (), "NodeTag") == 0)
 +    {
 +        struct type *type0 = check_typedef (type->field (0).type ());
 + struct value *v0 = val->primitive_field (0, 0, type);
 + const gdb_byte *valaddr = v0->contents_for_printing ().data ();
 +  
 + LONGEST enumval = unpack_long (type0, valaddr);
 +  
 + unsigned int len0 = type0->num_fields ();
 + for (unsigned int i0 = 0; i0 < len0; i0++)
 + if (enumval == type0->field (i0).loc_enumval ())
 + {
 + const char *tname = type0->field (i0).name ();
 + if (strlen(tname) <= 2 || tname[0] != 'T' || tname[1] != '_')
 + break;
 +  
 + tname += 2;
 + type = check_typedef (lookup_typename (current_language, tname, NULL, 0));
 + val->deprecated_set_type(type);
 + val->set_enclosing_type(type);
 + break;
 + }
 +    }
 +
 +
 +------------
 +Сделать сборку статической в изолированном окружении
 +
 +  $ ldd /usr/local/gdb/bin/gdb
 + linux-vdso.so.1 (0x00007ffd631b9000)
 + libzstd.so.1 => /lib64/libzstd.so.1 (0x00007f4bb00fd000)
 + libncursesw.so.5 => /usr/lib64/libncursesw.so.5 (0x00007f4bb00ca000)
 + libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f4baf1cf000)
 + libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f4baf19e000)
 + liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f4baf174000)
 + libmpfr.so.6 => /usr/lib64/libmpfr.so.6 (0x00007f4baee00000)
 + libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007f4baf0fa000)
 + libdl.so.2 => /lib64/libdl.so.2 (0x00007f4baf0f4000)
 + libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4baea00000)
 + libm.so.6 => /lib64/libm.so.6 (0x00007f4baecbb000)
 + libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f4baf0da000)
 + libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4baf0b9000)
 + libc.so.6 => /lib64/libc.so.6 (0x00007f4bae827000)
 + libgpm.so.1 => /usr/lib64/libgpm.so.1 (0x00007f4baf0af000)
 + /lib64/ld-linux-x86-64.so.2 (0x00007f4bb01d3000)
 +
 +  sudo apt-get install liblzma-devel-static libncurses-devel-static
 +  ./configure --with-static-standard-libraries --without-zstd --disable-compressed-debug-sections --with-mpfr=/opt/stalin/mpfr-4.2.1 --with-gmp=/opt/stalin/gmp-6.3.0
 +  
 + wget https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz
 + tar xf gmp-6.3.0.tar.xz 
 + cd gmp-6.3.0
 + ./configure --disable-shared --prefix=/opt/stalin/gmp-6.3.0
 + make -j`nproc`
 + make install
 + # find /opt/stalin/gmp-6.3.0
 + /opt/stalin/gmp-6.3.0
 + /opt/stalin/gmp-6.3.0/include
 + /opt/stalin/gmp-6.3.0/include/gmp.h
 + /opt/stalin/gmp-6.3.0/share
 + /opt/stalin/gmp-6.3.0/share/info
 + /opt/stalin/gmp-6.3.0/share/info/gmp.info-1
 + /opt/stalin/gmp-6.3.0/share/info/gmp.info
 + /opt/stalin/gmp-6.3.0/share/info/gmp.info-2
 + /opt/stalin/gmp-6.3.0/lib
 + /opt/stalin/gmp-6.3.0/lib/libgmp.a
 + /opt/stalin/gmp-6.3.0/lib/pkgconfig
 + /opt/stalin/gmp-6.3.0/lib/pkgconfig/gmp.pc
 + /opt/stalin/gmp-6.3.0/lib/libgmp.la
 + [root@7ea34f557e84 gmp-6.3.0]# 
 +
 +
 + git clone https://gitlab.inria.fr/mpfr/mpfr.git
 + cd mpfr
 + git checkout 4.2.1
 + ./autogen.sh
 + ./configure --with-gmp=/opt/stalin/gmp-6.3.0 --disable-shared --prefix=/opt/stalin/mpfr-4.2.1
 + make -j`nproc`
 + make install
 + [root@7ea34f557e84 mpfr]# find /opt/stalin/mpfr-4.2.1
 + /opt/stalin/mpfr-4.2.1
 + /opt/stalin/mpfr-4.2.1/include
 + /opt/stalin/mpfr-4.2.1/include/mpf2mpfr.h
 + /opt/stalin/mpfr-4.2.1/include/mpfr.h
 + /opt/stalin/mpfr-4.2.1/share
 + /opt/stalin/mpfr-4.2.1/share/doc
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/TODO
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/NEWS
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/COPYING.LESSER
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/COPYING
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/FAQ.html
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/BUGS
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/AUTHORS
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples/sample.c
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples/ReadMe
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples/divworst.c
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples/threads.c
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples/rndo-add.c
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples/can_round.c
 + /opt/stalin/mpfr-4.2.1/share/doc/mpfr/examples/version.c
 + /opt/stalin/mpfr-4.2.1/share/info
 + /opt/stalin/mpfr-4.2.1/share/info/mpfr.info
 + /opt/stalin/mpfr-4.2.1/lib
 + /opt/stalin/mpfr-4.2.1/lib/libmpfr.a
 + /opt/stalin/mpfr-4.2.1/lib/pkgconfig
 + /opt/stalin/mpfr-4.2.1/lib/pkgconfig/mpfr.pc
 + /opt/stalin/mpfr-4.2.1/lib/libmpfr.la
 + [root@7ea34f557e84 mpfr]# 
 +
 + wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-2.6.4.tar.gz
 + tar xf expat-2.6.4.tar.gz
 + cd expat-2.6.4/
 + ./configure --prefix=/opt/stalin/expat-2.6.4 --disable-shared
 + make -j`nproc`
 + sudo make install
gdb.1733838129.txt.gz · Last modified: 2024/12/10 13:42 by keremet