[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] lokalisere og fixe segfaults



Atte André Jensen <sslug@sslug> writes:

> Jeg programmerer egentlig ikke i c/c++, men jeg har et opensource
> projekt som segfault'er for mig. Jeg har sat en masse
> printf-statements ind og indkredset nogle af crashene, men andre ser
> ud til at flytte sig når jeg sætter printf-statements ind.

Et problem med håndtering af heap-allokeret hukommelse vil ofte først
vise sig et stykke tid efter den egentlige fejl. Hvornår afhænger i
høj grad af hvordan man ellers bruger heapen. Ved at indsætte
printf-statements ændrer du i høj grad på brugen af heapen.

Jeg har et par gange har held med følgende opskrift:

1) Sørg for at din process kan dumpe corefiler: 'ulimit -c unlimited'

2) Slå malloc check til: 'export MALLOC_CHECK_=3' (ja, der skal være
   en underscore tilsidst). Læs malloc(3) sidste afsnit under
   overskriften 'NOTES'.

3) Kør programmet, fremprovoker fejlen

4) Lav et backtrace med gdb: 'gdb /path/to/bin /path/to/core' og
   kommandoen bt.

Sidstnævnte vil muligvis give noget mere præcis information hvis du
oversætter dit program med flagene '-O0 -g'. Med malloc check slået
til vil du også få en fejlbesked ud på stderr. Det er ikke min
oplevelse at den i sig selv er så hjælpsom. Jeg har mest brugt den til
at finde det sted i malloc-implementation hvos den finder en fejl.

Bemærk at med malloc check sat så vil dit program dø med en SIGABRT og
ikke en SIGSEGV. Det vil du vidst både få fortalt når programmet dør
og af gdb når du genererer et backtrace. Hvis dit program ikke dør med
et SIGABRT er du ikke blevet utroligt meget klogere...

//Makholm


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2009-11-01, 02:01 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *