User Tools

Site Tools


gdb

Differences

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

Link to this comparison view

Next revision
Previous revision
gdb [2024/12/10 13:37] – created 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 
 +  ./configure --prefix=/usr/local/gdb 
 +  make 
 +  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.1733837877.txt.gz · Last modified: 2024/12/10 13:37 by keremet