Markus Rechberger / C / Core Dump
 
StartSeite | MarkusRechberger/ C/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (Autor, Normalansicht)

Hinzugefügt: 33a34,39
Coredumps können durch das Signal SIGSEGV erzeugt werden.

bsp.: kill -SIGSEGV <pid>

Bei Apache gibt es eine Direktive CoreDumpDirectory?.


Was mache ich mit coredumps?!

Programmerstellung

Das jeweilige Programm sollte mit -ggdb3 kompiliert werden, Level 3 ist das höchste level das angegeben werden kann Level 3 fügt Informationen wie Makro definitionen an die Debug Information.

Bevor die Applikation gestartet wird sollte man überprüfen ob das erstellen von Coredumps überhaupt erlaubt ist.

Coredumps einschalten:
ulimit -c ulimit

am besten man setzt die Limits auf verpfuschten Live Systemen direkt in der Konfigurationsdatei:

http://www.linux-hamburg.de/limits.html

My problems:

1. What's the difference btween soft and hard limit?
What will happen if I exceed the soft limit but in the hard limit?

----

The 'soft' values will be the default/starting value, and the user can
increse this up to the 'hard' value, if they want.

Only the root user can increse the hard limits.

Coredumps können durch das Signal SIGSEGV erzeugt werden.

bsp.: kill -SIGSEGV <pid>

Bei Apache gibt es eine Direktive CoreDumpDirectory?.

Coredumps debuggen mit gdb

gdb crash core
...
(gdb) bt
..
#2 0x1234444 in main () at foo.c:6

(gdb) frame 2
#2 0x1234444 in main() at foo.c:6
6          scanf("%d",input);

(gdb) print input
$1 = 0
(source linux programming bible)

Apache Coredumps

Coredumps werden nicht erzeugt wenn setuid() aufgerufen wird, bei Debian wird apache standardmäßig als root gestartet und die Childs dann mittels setuid() dem user www-data oder nobody zugewiesen. Um CoreDumps? von den ApacheChilds? zu bekommen muss man mod_prctl.c ( http://people.apache.org/~trawick/mod_prctl.c) am besten mit apxs -cia mod_pctl.c installieren.

[notice] child pid 1338 exit signal Segmentation fault (11), possible coredump in /opt/www

 - Berechtigungen von /opt/www überprüfen
 - ulimit beachten

Folgendes zeigt das php's APC Apache auch zum Absturz bringt (php 4.3.9):

# gdb /usr/local/bin/httpd core.1338
<snip>
(gdb) bt
#0 0x402d9853 in zend_hash_find (ht=0x82cd2ec, arKey=0x39333032 <Address 0x39333032 out of bounds>, nKeyLength=25857, pData=0xbfff63e0) at /usr/local/src/php-4.3.9/Zend/zend_hash.c:888
#1 0x402df84d in zend_fetch_dimension_address (result=0x40de31c0, op1=0x40de31d0, op2=0x40de31e0, Ts=0xbfff6434, type=3) at /usr/local/src/php-4.3.9/Zend/zend_execute.c:643
#2 0x402e33dc in execute (op_array=0x81a5c10) at /usr/local/src/php-4.3.9/Zend/zend_execute.c:1312
#3 0x4096db80 in my_execute (op_array=0x81a5c10) at /usr/local/src/APC-2.0.3/apc_main.c:199
#4 0x402e6d0a in execute (op_array=0x82b0d34) at /usr/local/src/php-4.3.9/Zend/zend_execute.c:1684
#5 0x4096db80 in my_execute (op_array=0x82b0d34) at /usr/local/src/APC-2.0.3/apc_main.c:199
#6 0x402e6d0a in execute (op_array=0x829fccc) at /usr/local/src/php-4.3.9/Zend/zend_execute.c:1684
#7 0x4096db80 in my_execute (op_array=0x829fccc) at /usr/local/src/APC-2.0.3/apc_main.c:199
#8 0x402e6d0a in execute (op_array=0x829fd8c) at /usr/local/src/php-4.3.9/Zend/zend_execute.c:1684
#9 0x4096db80 in my_execute (op_array=0x829fd8c) at /usr/local/src/APC-2.0.3/apc_main.c:199
#10 0x402d4e5e in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /usr/local/src/php-4.3.9/Zend/zend.c:891
#11 0x402aca25 in php_execute_script (primary_file=0xbffff8d8) at /usr/local/src/php-4.3.9/main/main.c:1735
#12 0x402ed526 in apache_php_module_main (r=0x8171104, display_source_mode=0) at /usr/local/src/php-4.3.9/sapi/apache/sapi_apache.c:54
#13 0x402ee14e in send_php (r=0x8171104, display_source_mode=0, filename=0x0) at /usr/local/src/php-4.3.9/sapi/apache/mod_php4.c:621
#14 0x402ee1b2 in send_parsed_php (r=0x8171104) at /usr/local/src/php-4.3.9/sapi/apache/mod_php4.c:636
#15 0x0806bfe9 in ap_invoke_handler ()
#16 0x080826ac in process_request_internal ()
#17 0x08082716 in ap_process_request ()
#18 0x08078e30 in child_main ()
#19 0x080790a8 in make_child ()
#20 0x08079438 in perform_idle_server_maintenance ()
#21 0x08079a9c in standalone_main ()
#22 0x0807a0ec in main ()
#23 0x400a414f in __libc_start_main () from /lib/libc.so.6

(gdb) print (char *)(executor_globals.function_state_ptr->function)->common.function_name
(gdb) print (char *)executor_globals.active_op_array->function_name 
(gdb) print (char *)executor_globals.active_op_array->filename 

PHP Debuggen: http://bugs.php.net/bugs-generating-backtrace.php


StartSeite | MarkusRechberger/ C/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 4. April 2005 10:53 (diff))
Suchbegriff: gesucht wird
im Titel
im Text