iPhone SDK 3.0 и symbolicatecrash, не проживая?

Существует .val() метод:

, Если у Вас есть вход с идентификатором txtEmail, можно использовать следующий код для доступа к значению текстового поля:

$("#txtEmail").val()

можно также использовать val(string) метод для устанавливания того значения:

$("#txtEmail").val("something")
12
задан 31 August 2009 в 22:12
поделиться

8 ответов

Я знаю, что для 3.0 SDK они переместили symbolicatecrash в новое место, и мне пришлось получить эту новую версию, чтобы сопоставления символов снова работали.

Для 3.0 он находится по адресу: /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources

Так что, возможно, стоит убедиться, что у вас самая последняя версия. Я вижу правильное отображение символов как для исходных, так и для функций API.

1
ответ дан 2 December 2019 в 19:55
поделиться

Редактировать символьный сбой. Перейдите к строке 506 и измените это:

    ARM      =>  "armv6",

на это:

    ARM      =>  "armv7",
0
ответ дан 2 December 2019 в 19:55
поделиться

Я испытал точно такую ​​же проблему и смогла его исправить, изменив символ сценария. Проблема для меня заключалась в том, что как «OTOOL», «ATOS» и «размер» не ведут себя хорошо с модулями, составленными для ARMV7. Есть версии этих инструментов, которые хорошо работают с такими модулями, которые можно найти в /developer/platforms/iphoneos.platform/developer/usr/bin. Для OTOOL ScripticaTecrash Script нашел в /developer/platforms/iphoneos.platform/developer/library/privateframeworks/dtdevicekit.framework/versions/a/resources/versions/a/resources, уже использует механизм для поиска соответствующей версии:

# Find otool from the latest iphoneos
my $otool = `xcrun -sdk iphoneos -find otool`;
chomp($otool);
my $atos = `xcrun -sdk iphoneos -find atos`;
chomp($atos);

Однако «размер» Используется непосредственно:

if (-e '/usr/bin/size') {
    open my($ph),"-|",'size','-m','-l','-x',$symbol or die $!;

изменение этого куска кода в уродливой:

if (-e '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/size') {
    open my($ph),"-|",'/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/size','-m','-l','-x',$symbol or die $!;

, кажется, делает его работать.

2
ответ дан 2 December 2019 в 19:55
поделиться

Я испытывал точно такую ​​же проблему - символы для системных модулей отображаются, но не из моих заявление. Оказывается, потому что мои файлы .sym не могут быть обнаружены прожектором, так как у меня были «скрытые» все продукты сборки, указав в настройках, которые все файлы сборки переходят в каталог «.xcode-build». Изменение этого на «Xcode-Build» исправлена ​​проблема!

1
ответ дан 2 December 2019 в 19:55
поделиться

Одно можно проверить. Если вы знаете файл DSIM, который вы хотите символиковать, то щелкните правой кнопкой мыши файл DSIM и выберите «Получить информацию». В более подробной информации раздел является UUID для файла DSYM. Для работы символика для работы UUID для вашего приложения (прилагается в угловые скобки в раздел двоичных изображений журнала аварийного журнала), необходимо соответствовать UUID файла DSYM.

Я нашел проблему в моем использовании PLCRASHREPORTER, где UUID в журнале аварии не соответствует UUID из генерируемого файла DSYM, что приводит к неспособности символов.

1
ответ дан 2 December 2019 в 19:55
поделиться

Если вы испытываете ситуацию, когда, когда вы запускаете символику сбой, только ваши собственные библиотеки являются символики, но системные библиотеки не символизируются, и у вас есть 3,0+ iPhone SDK, скорее всего, проблема что формат отчета, который вы являетесь символиком, является более старым форматом. Один из полей заголовка в отчете о сбоях - «Версия отчета», это версия вашего отчета о сбое. Самая текущая версия (во время этого письма iPhone OS 3.2.1) - «104». Тем не менее, SymbolicateCrash обрабатывает версию 102 и 103. Версия 104 представлена ​​новая новая архитектура чипа (ARMV7), а двоичные изображения имеют возможность указывать архитектуру чипа, которая используется. Версия 102 и 103 отчета о сбое не указывает архитектуру чипа для использования. Самая текущая версия SymbolicateCrash предположит использовать ARMV6 для версии 102 и 103 отчета. Это, вероятно, неверно.

Сбой символа должен быть написан, чтобы быть более совместимым со старыми форматами отчетов. В целом UUID для двоичных изображений на самом деле все, что вам нужно правильно сопоставить символы библиотеки системы для правильной версии ОС, а также архитектуру - архитектура, вероятно, избыточно. Однако, чтобы это произошло правильно, символикальный скрипт сбоя должен быть изменен, так что в дополнение к итерации через все версии системы, установленные на хост-машине, чтобы найти правильную библиотеку, она также должна повторяться через все микро архитектурам. Это, к счастью, довольно легко изменение.

Чтобы справиться с этим, я сделал следующие изменения:

в подпрограмме GetsymbolPathor:

if ( defined($temp_path) && matchesUUID($temp_path, $uuid, $arch) ) {
                        $out_path = $temp_path;
                        @out_path_arr = {};
                    } else {
                        undef $temp_path;
                        print STDERR "-- NO MATCH\n"  if $opt{v};
                    }

Изменение:

if ( defined($temp_path) && matchesUUID($temp_path, $uuid, $arch) ) {
                        $out_path = $temp_path;
                        @out_path_arr = {};
                    } else {
                        if ( defined($temp_path) && matchesUUID($temp_path, $uuid, 'armv7') ) {
                            $out_path = $temp_path;
                            @out_path_arr = {};
                        } else {
                            undef $temp_path;
                            print STDERR "-- NO MATCH\n"  if $opt{v};
                        }
                    }

Это проверит разные архитектуры чиповых архитектур на хост-системе, чтобы найти совпадение с UUID в Раздел двоичного изображения в отчете об аварийном отчете (и если предстоящий iPhone 2010 имеет различную архитектуру чипа, которая должна быть добавлена ​​к этому, если для этого, если они).

Для следующего изменения UUID-поисковой кусок кода является хрупким. Если OTool не возвращает что-то, что SymbolicateCrash может понять, SymbolicateCrash выйдет. В случае, когда вы тестируете UUID архитектуры, которая не распознается хост-машина, OTOOL ничего не вернется, а SymbolicateCrash умирает. Вам нужно сделать символику с крахом немного более снисходительным, просто игнорируйте результат OOTOOL, чтобы он мог перейти к следующей архитектуре, которую вы проверяете.

Измените подпрограмму MatchesuuID:

if ( $test eq $uuid ) {
        ## See that it isn't stripped.  Even fully stripped apps have one symbol, so ensure that there is more than one.
        my ($nlocalsym) = $TEST_uuid =~ /nlocalsym\s+([0-9A-Fa-f]+)/;
        my ($nextdefsym) = $TEST_uuid =~ /nextdefsym\s+([0-9A-Fa-f]+)/;
        my $totalsym = $nextdefsym + $nlocalsym;
        print STDERR "\nNumber of symbols in $path: $nextdefsym + $nlocalsym = $totalsym\n" if $opt{v};
        return 1 if ( $totalsym > 1 );

        print STDERR "## $path appears to be stripped, skipping.\n" if $opt{v};
    } else {
                    print STDERR "Given UUID $uuid for '$path' is really UUID $test\n" if $opt{v};
            }
} else {
            die "Can't understand the output from otool ($TEST_uuid)";
    }

к чему-то более снисходительному, как это:

if ( $test eq $uuid ) {
        ## See that it isn't stripped.  Even fully stripped apps have one symbol, so ensure that there is more than one.
        my ($nlocalsym) = $TEST_uuid =~ /nlocalsym\s+([0-9A-Fa-f]+)/;
        my ($nextdefsym) = $TEST_uuid =~ /nextdefsym\s+([0-9A-Fa-f]+)/;
        my $totalsym = $nextdefsym + $nlocalsym;
        print STDERR "\nNumber of symbols in $path: $nextdefsym + $nlocalsym = $totalsym\n" if $opt{v};
        return 1 if ( $totalsym > 1 );

        print STDERR "## $path appears to be stripped, skipping.\n" if $opt{v};
    } else {
                    print STDERR "Given UUID $uuid for '$path' is really UUID $test\n" if $opt{v};
            }
} else {
            #die "Can't understand the output from otool ($TEST_uuid)";
            print "Can't understand the output from otool ($TEST_uuid)";
    }

После того, как я сделал эти изменения, я смог увидеть системные объекты, которые правильно получают символики (а также мой собственный код), когда я использую отчет о сбоях Версии 102 и 103 с текущим iPhone SDK (3.1.2).

4
ответ дан 2 December 2019 в 19:55
поделиться

У меня было множество запусков с symbolicatecrash, последнее с момента обновления до SDK 4. Несмотря на сборку для архитектур armv6 и amrv7, otool и atos блокируют двоичный образ моего приложения. Я внес следующие изменения, и все снова работает. Надеюсь это поможет.

ОТ (sub symbolize_frames):

открыть мой ($ ph), $ cmd или умереть $ !;

ДО:

открыть мой ($ ph), $ cmd или умереть $ !; if (rindex (, "atos не может загрузить символы"! = -1 && $ arch eq "armv7")) { $ arch = "armv6"; my $ cmd = "$ atos -arch $ arch -o '$ escapedSymbol' @ {[keys% $ frames]} |";

print STDERR "Running $cmd\n" if $opt{v};
open $ph,$cmd or die $!;

}

И

FROM (sub соответствуетUUID):

} еще { die "Не могу понять вывод otool ($ TEST_uuid)"; }

TO:

} else { if ($ arch eq "armv7") { вернуть совпаденияUUID ($ path, $ uuid, "armv6"); } еще { die "Не могу понять вывод otool ($ TEST_uuid)"; } }

0
ответ дан 2 December 2019 в 19:55
поделиться

Предложения Грега, не сработали для меня, но помогли указать верное направление заставить журналы plcrashreporter (репортер версии 103) снова символизировать с sdk 4.0.

BTW: это проблема, с которой вы определенно столкнетесь с отчетами, созданными на более новых устройствах (armv7). потому что symbolicate предполагает, что отчеты версии 103 - это armv6.

Вот что я сделал...

1)

сделайте копию самого нового скрипта symbolicatecrash (sdk 4.0) для изменений, которые вы делаете. Примечание: в зависимости от редактора, который вы используете, вам, возможно, придется установить исполняемый бит после редактирования. chmod 755 symbolicatecrash


2) проблема: поиск символов -- NO MATCH

это потому, что по умолчанию установлено armv6.

Решение: в sub parse_images установить архитектуру по умолчанию my $default_arch = 'armv7';


3) проблема: "Использование неинициализированного значения $bundle ..."

Решение:

заменить:

$app = $bundlename if (!defined $app && defined $image{plus} && length $image{plus});

на:

$app = $bundlename if (!defined $app);

4) проблема: "не может понять вывод из otool"

Решение: исправление Грега для sub matchesUUID.

replace:

} else { die "Can't understand the output from otool ($TEST_uuid)"; }

by:

} else { if ($arch eq "armv7") { return matchesUUID($path, $uuid, "armv6"); } else { die "Can't understand the output from otool ($TEST_uuid)"; } }

5) issue: "atos не может найти символы"

здесь изменения Грега не сработали,

  • похоже, что <$ph> в rindex( потерялся в подсветке кода.
  • сообщение "atos не может загрузить символы" не было передано в скрипт - поэтому проверка не сработала
  • сообщение <$ph> в rindex( читает первую строку... поэтому один кадр теряется в случае успешной проверки. В качестве "хака" я просто подделал кадр с adreass 1... который "используется" во время проверки atos.

Вот что я изменил в sub symbolize_frames:

replace:

my $cmd = "$atos -arch $arch -o '$escapedSymbol' @{[ keys %$frames ]} | ";

by:

my $cmd = "$atos -arch $arch -o '$escapedSymbol' 1 @{[ keys %$frames ]}  2>&1 | ";

replace:

open my($ph),$cmd or die $!;

на:

open my($ph),$cmd or die $!;
if (rindex(<$ph>, "atos cannot load symbols") != -1 && $arch eq "armv7") {
    my $arch = "armv6"; my $cmd = "$atos -arch $arch -o '$escapedSymbol' @{[ keys %$frames ]}  2>&1 | ";
    print STDERR "Running $cmd\n" if $opt{v};
    open $ph,$cmd or die $!;
}

Примечание: с этими изменениями скрипт работает нормально для меня - "исправления", вероятно, не очень элегантны, но я не владею perl :) ...

8
ответ дан 2 December 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: