Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GDB and bug analyzes

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on. →

GDB and bug analyzes

How to analyze bugs using GDB

Avatar for Marcelo Altmann

Marcelo Altmann

May 28, 2020

More Decks by Marcelo Altmann

Other Decks in Technology

Transcript

  1. © 2020 Percona 1 Marcelo Altmann GDB & Análise de

    bugs Software Engineer MySQL Brazil Virtual Meetup 2nd Edition 28/05/2020
  2. © 2020 Percona 3 Marcelo Altmann ▪ Desenvolvedor @ percona

    • Engenheiro de Suporte Senior @ percona • Líder Técnico @ percona • MySQL DBA @ IEDR (CCTLD Irlanda) ▪ Tecnologo em Sistemas para Internet ▪ Oracle ACE Associate ▪ blog.marceloaltmann.com ▪ Certificaçoes • OCP, MySQL 5.7 Database Administrator • OCP, MySQL 5.6 Database Administrator • OCP, MySQL 5.6 Developer • OCP, MySQL 5 Database Administrator • OCP, MySQL 5 Developer • OCP, MySQL 5.0/5.1/5.5
  3. © 2020 Percona 4 We are hiring! • Database Engineer

    Remote (South America) https://jobs.lever.co/percona?lever-via=ppuf96MTKk
  4. © 2020 Percona 9 Signals • SIGABRT / 6 -

    Assertion declaradas no código. ◦ ut_a(expressão) / ut_ad(condição) - Deve dar falso. ◦ Utilizado para prevenir que erros se propaguem. • SIGSEGV / 11 - Segmentation Fault ◦ Proteção contra acesso inválido de memória. ◦ Objeto deletado. ◦ Área de memória externo ao programa.
  5. © 2020 Percona 10 Stack traces ▪ Finger print da

    execução até o momento do crash. ▪ Se Lê de baixo para cima / Bottom top ▪ Comum entre todas stack traces: • handle_fatal_signal() - Responsável por tratar os sinais que abortam o server - https://github.com/percona/percona-server/blob/8.0/sql/signal_handler.cc • my_print_stacktrace() - Responsável por logar a execução do MySQL que falhou. Pode ser desabilitado via --skip-stack-trace
  6. © 2020 Percona 12 Symbols ▪ Lista de funções do

    código fonte ▪ ID em hexadecimal ▪ Aumenta o tamanho do binário. ▪ Instalar o pacote -debuginfo
  7. © 2020 Percona 13 Symbols ▪nm -Dn /usr/sbin/mysqld > /tmp/symbols.out

    ▪ Extrair a assinatura em hexadecimal do stack trace: cat /tmp/stack.tmp | awk -F'[' '{print $2}' | awk - F ']' '{print $1}' > /tmp/stack.out
  8. © 2020 Percona 15 GDB ▪ GNU Debugger ▪ Funciona

    em várias linguagens ▪ With Great Power, comes great responsibility ▪ Pode ser usado: • Remoto • Interpretando processo - gdb -p PID • Rodando processo - gdb --args bin/mysqld [argumentos] --gdb • Offline (coredump) - gdb bin/mysqld core.PID
  9. © 2020 Percona 16 GDB ▪ Break point - parar

    neste ponto quando a execução chegar. ▪ Next - rodar o código até a próxima linha. ▪ Continue - rodar o código até próximo break point. ▪ Step - entrar na função. ▪ Bt - Mostrar Backtrace / Stack trace. ▪ Frame - pular para frame especídico dentro da backtrace.
  10. © 2020 Percona 17 Poor Man's Profiler - PMP ▪

    Agregador de stack traces. ▪ Útil para server com muitas threads ▪ https://poormansprofiler.org/ ▪ Parte do Percona Toolkit - pt-pmp
  11. © 2020 Percona 18 cscope ▪ Browser para código fonte

    ▪ Mais otimizado que grep -Ri [texto] =) ▪ https://www.percona.com/blog/2017/09/12/cscope-searching-code-efficiently/ ▪ https://github.com/altmannmarcelo/my_scripts/blob/master/bin/mycscope • Innodb usa .ic • Mensagem de erro são declaradas em .txt (errmsg-utf8.txt, messages_to_clients.txt, messages_to_error_log.txt)
  12. © 2020 Percona 19 Mutex ▪ Proteção contra acesso simultaneo

    a hot area. ▪ Vou ler / escrever em variável X mutex_lock(var_mutex); var = 'bla'; mutex_unlock(var_mutex);
  13. © 2020 Percona 21 D E M O T I

    M E ! ! ! Fails in 99.9% of the cases!
  14. DATABASE PERFORMANCE MATTERS Database Performance Matters Database Performance Matters Database

    Performance Matters Database Performance Matters Database Performance Matters Obrigado!