Difference between revisions of "LU-LSP-b13:LA"

From DiLab
Jump to: navigation, search
(New page: === Linux lietotāja programmatūras atkļūdošanas rīki === * '''GDB''' - GNU debugger * '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pā...)
 
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
=== Linux lietotāja programmatūras atkļūdošanas rīki ===
=== Linux lietotāja programmatūras atkļūdošanas rīki ===


* '''GDB''' - GNU debugger
* '''gdb''' - GNU debugger
** '''gdbserver''' - GDB papildprogramma attālinātai atklūdošanai. gdbserver var palaist, piemēram, uz iegultas sistēmas bez grafiskās saskarnes, un atkļūdot tur esošās programmas caur TCP savienojumu, pieslēdzoties ar "parasto" GDB kā ar klientu.
* '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (<code>--tool=memcheck</code>), profilētāju (<code>--tool=callgrind</code>) u.c.
* '''valgrind''' - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (<code>--tool=memcheck</code>), profilētāju (<code>--tool=callgrind</code>) u.c.
* '''objdump''' - disasemblēšanas rīks
* '''objdump''' - disasemblēšanas rīks, simbolu informācija
* '''/proc failusistēma''' - visa veida informācija par procesiem un sistēmas resursiem
* '''/proc failusistēma''' - visa veida informācija par procesiem un sistēmas resursiem
* '''strace''' &a '''ltrace''' utilītas, ''ptrace'' sistēmas izsaukums - konkrēta procesa darbības izsekošana
* '''strace''' & '''ltrace''' utilītas, '''ptrace''' sistēmas izsaukums - konkrēta procesa darbības izsekošana
* Dažāda veida informācija par resursu lietojumu:
* Dažāda veida informācija par resursu lietojumu:
** '''ps''' - procesi
** '''ps''' - procesi
Line 12: Line 13:
** '''vmstat''' - atmiņa ("virtual memory status")
** '''vmstat''' - atmiņa ("virtual memory status")
* Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):
* Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):
** '''lsusb''' - parādīt pieslēgtās USB ierīces
** '''lsusb''' - parādīt pieslēgtās USB ierīces ("list usb")
** '''lspci''' - parādīt pieslēgtās PCI ierīces
** '''lspci''' - parādīt pieslēgtās PCI ierīces ("list pci")
** '''lsof''' - parādīt atvērtos failus
** '''lsof''' - parādīt atvērtos failus ("list open files")





Latest revision as of 15:24, 12 November 2013

Linux lietotāja programmatūras atkļūdošanas rīki

  • gdb - GNU debugger
    • gdbserver - GDB papildprogramma attālinātai atklūdošanai. gdbserver var palaist, piemēram, uz iegultas sistēmas bez grafiskās saskarnes, un atkļūdot tur esošās programmas caur TCP savienojumu, pieslēdzoties ar "parasto" GDB kā ar klientu.
  • valgrind - apvieno sevī vairākus jaudīgus rīkus: dinamiskās atmiņas lietošanas pārbaudes rīku (--tool=memcheck), profilētāju (--tool=callgrind) u.c.
  • objdump - disasemblēšanas rīks, simbolu informācija
  • /proc failusistēma - visa veida informācija par procesiem un sistēmas resursiem
  • strace & ltrace utilītas, ptrace sistēmas izsaukums - konkrēta procesa darbības izsekošana
  • Dažāda veida informācija par resursu lietojumu:
    • ps - procesi
    • top/htop - aktīvākie procesi
    • nstat - tīkls ("network status")
    • vmstat - atmiņa ("virtual memory status")
  • Vēl cita veida informācija par resursu lietojumu (vairāk kodola un HW atkļūdošanai?):
    • lsusb - parādīt pieslēgtās USB ierīces ("list usb")
    • lspci - parādīt pieslēgtās PCI ierīces ("list pci")
    • lsof - parādīt atvērtos failus ("list open files")


Piemērs

Atkļūdojamās programmas kods:

#include <stdio.h>
#include <stdlib.h>

void nullDeref(int *p) {
    *p = 0x1234;
}

void f(int param);
void g(void) {
    printf("calling g\n");
    f(0);
}

void f(int param) {
    int localVariable = 1;
    printf("calling f, &localVariable=%p\n", &localVariable);
    g();
}

void stackOverflow(void) {
    f(1);
}

void memoryAllocate(void) {
    int i, j;
    char *array = malloc(10);
    i = j = 5;
    while (i-- >= 0) {
        array[i] = 0x13;
    }
    while (j++ >= 0) {
        array[j] = 0x13;
    }
}


int main(void) {
    int i;
    int *p = NULL;
    nullDeref(p);
    stackOverflow();
    for (i = 0; i < 100; ++i) {
        memoryAllocate();
    }
    return 0;
}