Debuging in linux

Просмотр системных вызовов.

strace ls
 
strace -c -p 1

Просмотр стека.

GNU Debugger(Основной unix отладчик).

yum install gdb
# pstack 1
#0  0x00007fe1fb6f3763 in __epoll_wait_nocancel () from /lib64/libc.so.6
#1  0x00007fe1fd761bbd in manager_loop ()
#2  0x00007fe1fd75906c in main ()

Чтобы увидеть переданные в функцию аргументы надо доустановить пакеты с отладочной информацией, а так же при наличии для самого приложения(при наличии).

yum install --enablerepo=base-debuginfo glibc-debuginfo

 Есть нюанс,glibc-debuginfo и  glibc-debuginfo-common должны быть одной версии c glibc, если эти пакеты ставятся е в один день с  ОС, а позже часто приходится понижать их версию. Указываем версию glibc.

# rpm -qa | grep glibc
glibc-devel-2.17-78.el7.i686
glibc-debuginfo-2.17-196.el7.x86_64
glibc-2.17-78.el7.x86_64
glibc-static-2.17-78.el7.x86_64
glibc-2.17-78.el7.i686
glibc-common-2.17-78.el7.x86_64
glibc-devel-2.17-78.el7.x86_64
glibc-debuginfo-common-2.17-196.el7.x86_64
glibc-headers-2.17-78.el7.x86_64
 yum downgrade --enablerepo=base-debuginfo glibc-debuginfo-common-2.17-78.el7  glibc-debuginfo-2.17-78.el7
# pstack 1
#0  0x00007f1f1ae84763 in __epoll_wait_nocancel () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f1f1cef2bbd in manager_loop ()
#2  0x00007f1f1ceea06c in main ()

Показывает имя функиции  и на какой строке исходного кода сейчас выполнение.

Посистема perf в ядре linux.

Запускется n ное кол-во раз в секунду, которое адаптивно подбирается в зависимости от нагрузки на ситему,perf сохраняет состояние запущенных процессов(и функции приложения и функции ядра) в RAM(статистика).

# yum install perf
 
# perf top
 
Samples: 3K of event 'cycles:ppp', Event count (approx.): 70830328312566
Overhead  Shared Object                    Symbol
  44,59%  [kernel]                         [k] tick_nohz_restart
  19,02%  libglib-2.0.so.0.5000.3          [.] g_source_set_name_by_id
  12,74%  libc-2.24.so                     [.] _int_malloc
   9,51%  [kernel]                         [k] entry_SYSENTER_32
   8,58%  [kernel]                         [k] native_apic_mem_read
   5,57%  libmutter.so.0.0.0               [.] meta_wayland_compositor_paint_finished
   0,00%  i965_dri.so                      [.] _init
   0,00%  [kernel]                         [k] kallsyms_expand_symbol.constprop.6
   0,00%  [kernel]                         [k] format_decode
   0,00%  perf                             [.] __symbols__insert
   0,00%  perf                             [.] rb_next
   0,00%  libglib-2.0.so.0.5000.3          [.] g_mutex_lock
   0,00%  [kernel]                         [k] update_blocked_averages
   0,00%  [kernel]                         [k] module_get_kallsym
   0,00%  [kernel]                         [k] vsnprintf
   0,00%  perf                             [.] rb_insert_color
   0,00%  perf                             [.] hex2u64

Аналог strace

# [tim@localhost ~]$ sudo perf trace ls
         ? (     ?   ): :3802/3802  ... [continued]: execve()) = 0
     0.130 ( 0.006 ms): :3802/3802 brk(                                                                  ) = 0xd2f000
     0.130 ( 0.056 ms): :3802/3802  ... [continued]: mmap2()) = -1217335296
     0.199 ( 0.013 ms): :3802/3802 access(filename: 0xb7735930, mode: R                                  ) = -1 ENOENT No such file or directory

Так же может быть полезен perf stat.