1

このエラーで何が起こっているのかを判断できません。

複数のセグメントでファイルをアップロードしています。

API呼び出しを7つの並行スレッドにスレッド化しました。

これが停止するアセンブリコードです。

アセンブリコード

これが私の印刷されたスタックトレースです

印刷されたスタックトレース

最後に、スタックウィンドウ

スタックウィンドウ

dispatch_get_low()の#defineを除いて、DISPATCH_QUEUE_PRIORITY_LOWがなく、dispatch_get_low()の呼び出しもありません。

少し背景として、私はxcode 4.4からアプリを開発しており、最近iOS6でテストするためにGMSeed 4.5をインストールしました。私のコードはすべてまだios5であり、このバグはxcodeの更新の前後で私を悩ませました。

アップデート

NSZombieEnabledYESを環境変数に追加し直した後

NSZombieEnabled環境変数

ほぼ同じ方法で別のエラーが表示されましたが、これは転送と呼ばれます

アセンブリブレークポイント

ブレークポイントアセンブリ

スタックトレースのプリントアウト

スタックトレースのプリントアウト

スタックウィンドウを呼び出す

スタックウィンドウを呼び出す

私は実際に何が起こっているのかまだ途方に暮れています。

まだ調査中です。それ以上の支援は大歓迎です。

====新しい開発====

どうやらmalloc呼び出しの出力を取得しようとしている間。私はバグを完全に軽減しました。

このフラグを有効にしてリリース用にコンパイルできるとは思わないので、これはがっかりします。

ここに画像の説明を入力してください

EXC_BAD_ACCESSは表示されなくなるため、ログは使用できなくなります。このバグは私が今まで直面した中で最も奇妙な問題であることが判明しており、私は多くの奇妙なiOSのバグに直面しています。

再度更新する

私はこのエラーを追跡してきました。問題となっているオブジェクトは-[CFNumber release]呼び出しであることが判明しました。番号はブロック内に作成され、デリゲートに渡されます。

また、CoreDataオブジェクトを保存してから削除することと組み合わせることができます。

行番号とファイル名をログに記録するメソッドHSLogBrute(@ "")を追加しました。

私はそれを次のコードまで追跡しました。

    if (progressMatch > progressPercent){
        HSLogBrute(@"");
        TransferStatus *transferStatus = [TransferStatus objectByID:task.transferStatusID];
        HSLogBrute(@"");
        transferStatus.segmentsTransferred = [NSNumber numberWithInt:segmentsTransferred.intValue];
        HSLogBrute(@"");
        transferStatus.segmentsTotal = [NSNumber numberWithInt:segmentsTotal.intValue];
        HSLogBrute(@""); // This is the last log I am getting.
        [transferStatus save];
        HSLogBrute(@"");
    }
    HSLogBrute(@"");// Before putting in the [NSNumber numberWithInt:] calls this was the last line.
4

1 に答える 1

0

NSMutableDictionary を作成し、その中で数値を使用していたことがわかりました。私たちが行っていたのと同じくらい速く NSNumbers を作成および破棄すると、ある時点で arc が混乱したようです。そして、オブジェクトは保持され、順不同で解放されていました。

私の解決策は、必要な数値を含むカスタム オブジェクトを作成することでした。そして、非常に多くの NSNumber 値を作成して破棄するのではなく、これらのプリミティブな数値型をインクリメントおよびデクリメントします。

于 2012-09-26T23:11:06.883 に答える