Como visualizar arquivos principais para fins de depuração no Linux?

21

Eu quero ver o conteúdo de um arquivo principal durante a depuração de um programa. Como posso ver o conteúdo de um arquivo principal?

    
por Özzesh 09.09.2013 / 12:09

5 respostas

13

objdump -s core-file

Exemplo de saída:

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 
[...]
    
por 09.05.2015 / 19:29
11

gdb é o depurador GNU que pode ser usado para examinar o arquivo principal. BTW bt (backtrace) é um comando gdb útil para examinar a pilha de chamadas do programa.

gdb binary-file core-file
    
por 09.09.2013 / 12:15
4

Quando você compila o programa, use a opção -g

gcc -gprogram.c

Se o arquivo principal for criado, você poderá depurar usando o gdb sem usar a opção -g Os sinalizadores de depuração não serão habilitados.

    
por 09.09.2013 / 13:22
2

Se preferir usar a ferramenta de linha de comando, você pode usar o gdb :

gdb <program> <core file>

ou

gdb <program> -c <core file>

Se você gosta de gui, então instale o ddd , e a partir daí abra o programa para depurar e o arquivo principal .

    
por 09.09.2013 / 13:13
-1
#-------------------------------------------------------------------------
#!/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
    
por 23.11.2016 / 02:59