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

From DiLab
Jump to: navigation, search
Line 6: Line 6:
 
* '''objdump''' - disasemblēšanas rīks
 
* '''objdump''' - disasemblēšanas rīks
 
* '''/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

Revision as of 15:22, 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
  • /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
    • lspci - parādīt pieslēgtās PCI ierīces
    • lsof - parādīt atvērtos failus


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;
}