Difference between revisions of "LU-LSP-b13:LA"
(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 |
||
** '''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''' & |
* '''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; }