Comment afficher les files core à des fins de debugging sous Linux?

Je veux voir le contenu d'un file core pendant le debugging d'un programme. Comment puis-je voir le contenu d'un file core?

gdb est le débogueur GNU qui peut être utilisé pour examiner le file core. BTW bt (backtrace) est une command gdb utile pour examiner la stack d'appels du programme.

 gdb binary-file core-file 
 objdump -s core-file 

Exemple de sortie:

 core.30049: file format elf64-x86-64 Contents of section note0: 0000 05000000 88000000 03000000 434f5245 ............CORE 0010 00000000 00740000 00600040 00000000 .....t...`.@.... 0020 00000000 e8030000 e8030000 61750000 ............au.. 0030 c4730000 61750000 f1340000 636f756e .s..au...4..coun 0040 745f696e 66696e69 74652e6f 2f686f6d t_infinite.o/hom 0050 652f6369 726f2f62 616b2f67 69742f63 e/ciro/bak/git/c 0060 70702f63 68656174 2f676462 2f636f75 pp/cheat/gdb/cou 0070 6e745f69 6e66696e 6974652e 6f757420 nt_infinite.out [...] 

Lorsque vous comstackz le programme, utilisez l'option -g

gcc -g program.c

Si le file core est créé, vous pouvez déboguer à l'aide de gdb sans utiliser l'option -g. Les options de debugging ne seront pas activées.

Si vous préférez utiliser l'outil de command line, vous pouvez utiliser gdb :

 gdb <program> <core file> 

ou

 gdb <program> -c <core file> 

Si vous aimez gui, installez ddd , puis ouvrez le programme pour déboguer et le file core.

 #------------------------------------------------------------------------- #!/usr/bin/ksh # ------------------------------------------------------------------------- _OUTFILE=XXXX-XXXX-Audit-`date +"%Y%m%d%H%M"`.log >$_OUTFILE MAILLIST="" COREPATH=$PKMS/logs/cores MARKER=$COREPATH/marker function Parse { while getopts :p:u:s:l: name do case $name in p) PKMS="$OPTARG" ;; # $PKMS u) DBUSER="$OPTARG" ;; # $DBUSER s) DBPSWD="$OPTARG" ;; # $DBPSWD l) DBLOCN="$OPTARG" ;; # $DBLOC *) Usage ;; # display usage and exit esac done if [[ -z "${PKMS}" || -z "${DBUSER}" || -z "${DBPSWD}" || -z "${DBLOCN}" ]] then echo $Usage exit -1 fi } function getCoreDumps { COREFILES=$COREPATH/newcores.txt STACKS=$COREPATH/stacks.txt DATE=$(date +%y%m%d%H%M%S) >$COREFILES >$STACKS umask 002 find $COREPATH -type f -newer $MARKER -name "core" > $COREFILES find $COREPATH -type f -newer $MARKER -name "core.?" >> $COREFILES rm $STACKS 2>/dev/null for i in $(<$COREFILES) do mv $i $i.$DATE chmod g+r,g+w $i.$DATE #echo "Coredump recently found at" `date` '\n'>> $STACKS echo $i.$DATE >> $STACKS #echo >> $STACKS done NL=$(wc -l $COREFILES | awk '{ print $1 }') if [ "$NL" -gt 0 ] then echo "New CORE files found:" >> $_OUTFILE echo "--- ---- ----- ------" >> $_OUTFILE cat $STACKS >> $_OUTFILE else echo "No new CORE files found" >> $_OUTFILE echo "-- --- ---- ----- -----" >> $_OUTFILE fi } #/usr/bin/clear echo "\t\t\t\t---------------------------------\t" >> $_OUTFILE echo "\t\t\t\t echo "\t\t\t\t---------------------------------\t" >> $_OUTFILE date "+ %d/%m/%Y %H:%M:%S" >> $_OUTFILE echo "===================" >> $_OUTFILE echo " APPICATION MACHINES" >> $_OUTFILE echo "===================" >> $_OUTFILE echo >> $_OUTFILE echo >> $_OUTFILE getCoreDumps echo >> $_OUTFILE echo >> $_OUTFILE echo "===================" >> $_OUTFILE echo "XXXX APP DataBase Info" >> $_OUTFILE echo "===================" >> $_OUTFILE echo >> $_OUTFILE getAPPDBInfo echo >> $_OUTFILE echo >> $_OUTFILE MAILDATE=$(date +%d/%m/%Y) mailx -s "XXXX Monitor Log for $PKMS Environment - Dated $MAILDATE" $MAILLIST < $_OUTFILE touch $MARKER rm /tmp/XXXXtempOUTFILE exit 0