SymbolicateCrash не создает правильный де-символьный файл

У меня есть файл dSYM для сборки, созданный на клиентской машине. У клиента произошел сбой при сборке, и теперь я пытаюсь де-символ, используя symbolicatecrash, с помощью простой следующей команды в терминале:

symbolicatecrash myapp_iPod-Touch.crash myapp.app.dSYM > test.txt

но при этом не создается никакого значимого де-символьного файла. и это дает следующую ошибку в терминале:

Can't understand the output from otool

то я нашел решение по следующей ссылке: iPhone SDK 3.0 и symbolicatecrash не ладите?, но все же он не отменяет символику точного места в памяти до точной строки кода, ответственной за сбой.

Затем я попробовал и другие варианты: Ниже приведен другой вариант, но он не сработал:

symbolicatecrash.sh -A -v [crashlog-filename] MyApp.dSYM

Для справки: http://apptech.next-munich.com/2010/01/symbolicatecrash.html

Лучший вариант, который мне помог, - это команда atos, чтобы получить точный номер строки кода сбоя, но я хочу, чтобы систематический символический сбой создавал дамп.

ПРИМЕЧАНИЕ. Когда я создаю сборку на своей машине и удаляю символику (созданная моей машиной) журнал сбоев сборки на моем компьютере, он создает совершенно хороший файл дампа (показать точное место в памяти VS строка кода, отвечающая за сбой).


person UPT    schedule 29.09.2011    source источник


Ответы (1)


Если у вас есть файл DSYM для сбоя, вы можете использовать этот:

#!/bin/bash

if [[ $# < 2 ]]
then
echo "Usage: $0 [-arch <arch> (defaults to whatever is specified in the crashlog-   file] <dSYM-file> <crashlog-file>"
exit 1
fi

#Get the architecture either from the params or from the crashlog itself
ARCH_PARAMS=''
if [[ "${1}" == '-arch' ]]
then
ARCH_PARAMS="-arch ${2}"
shift 2
else
ARCHITECTURE=$(cat "${2}" | grep -A1 "Binary Images:" | grep 0x | sed -E -n 's/.*(armv[6-9]).*/\1/p')
if [ -n "${ARCHITECTURE}" ]
then
    ARCH_PARAMS="-arch ${ARCHITECTURE}"
else
    echo "Couldn't determine architecture based on the crashlog. Please specify it by calling $0 -arch <arch> <dSYM-file> <crashlog-file>"
    exit
fi
fi
echo "Assuming architecture:" ${ARCHITECTURE}

#Store the other params
SYMBOL_FILE="${1}"
CRASHLOG="${2}"

#Get the identifier out of the crashlog
IDENTIFIER=$(cat "${CRASHLOG}" | egrep -o "^Identifier:[[:space:]]*.*$" | sed 's/^Identifier:[[:space:]]*\(.*\)$/\1/')
echo "Identifier:" $IDENTIFIER
echo
echo

#Iterate through the crashlog files, find the ones that belong to the $IDENTIFIER, sed the address out of those files, symbolicate them with atos and finally replace them back into those line again. Print all other lines untouched.
while read line
do
SYMBOL=$(echo $line | sed -E -n "s/.*(${IDENTIFIER}[[:space:]]*)(0x[[:alnum:]]*).*/\2/p" | atos -o "${SYMBOL_FILE}/Contents/Resources/DWARF/${IDENTIFIER}"     ${ARCH_PARAMS})
if [ -n "$SYMBOL" ]
then
    echo $line | sed -E "s/(${IDENTIFIER}[[:space:]]*)(0x[[:alnum:]]*)(.*)/\1\2 ${SYMBOL}/"
else
    echo $line
fi
done < "${CRASHLOG}"
person rage    schedule 30.09.2011
comment
это строки, которые я должен написать в десиболикаторе, а затем запустить в терминале? - person UPT; 03.10.2011
comment
Это еще один сценарий символизации, который вы можете использовать. просто скопируйте его в файл, например, symbolicate.sh, установите его разрешения, чтобы он стал исполняемым, а затем просто вызовите его из командной строки с аргументами, указанными в строке 5. - person rage; 05.10.2011