0

iOS5 が登場して以来、次のような多くの (非常に多くの) クラッシュ レポートを受け取り始めました。

...
Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x0
Crashed Thread:  0

Thread 0 Crashed:
0   libsystem_c.dylib  0x35ec4b3c memset$VARIANT$CortexA8 + 116
1   FooApp             0x0005ba25 -[FooViewController prepareShapes] (FooViewController.m:808)
...

関連する詳細:

  • X コード 4.2
  • LLVM3.0
  • 「armv6 armv7」アーキテクチャ
  • iOS 5 ベース SDK
  • iOS 4.0 を対象とする
  • iOS5 でのみクラッシュします (すべての iOS5 iPhone モデル。iPad はクラッシュしませんが、アプリはユニバーサルではありません)。
  • どのデバイスでもクラッシュを再現できません (もちろん)

[FooViewController prepareShapes]直接呼び出すmemsetのではなく、(形状を表す) 構造体を、再割り当てを試みるクラス メソッドに渡します。スタック トレースがクラス メソッドをスキップするという事実は少し奇妙ですが、私には理解できないコンパイラ マジックであることは間違いありません。クラス メソッド内で、呼び出すブロックmemsetは次のとおりです。

// class method invoked by [FooViewController prepareShapes]:808 (shape is coloured2DShape instance) 
shape->maxVertexCount = maxVertexes;
if (shape->maxVertexBytes != 0)
{
    free(shape->vertices);
}
shape->maxVertexBytes = sizeof(vertex_2D_4byteColour) * shape->maxVertexCount;
shape->vertices = (vertex_2D_4byteColour *)malloc(shape->maxVertexBytes);
memset(shape->vertices, 0, shape->maxVertexBytes);

そして、これが操作されている構造体です

// coloured2DShape struct
typedef struct coloured2DShape
{
    vertex_2D_4byteColour* vertices;
    GLushort* indices;
    uint maxVertexBytes;
    uint maxIndexBytes;
    int vertexCount;
    int indexCount;
    int maxVertexCount;
    int maxIndexCount;
} coloured2DShape;

これは OpenGL を行うための推奨される方法に近いものではないことは認識していますが、私を本当に困惑させているのは (そして、私はここで本当に困惑させられています) memset、iOS5 でのみ爆破されていることです (私はQuincyKitを使用して収集していますクラッシュ レポートとそれらを集計するHockeyApp )。この正確なコードは、何ヶ月も iOS4 (GCC でコンパイル) の下でクルージングされていました。

これが「宿題をする」ことと解釈されないことを願っています。私は何ヶ月も調査、微調整(この問題に対処するいくつかのアップデートをリリースしました)、そして髪を引っ張るのに何の進歩もありませんでした. 私はすべてのアイデアがありません。

4

2 に答える 2

1

memsetそれはうまくいっていると思いますが、 への呼び出しmallocが何らかの理由で失敗し、0.

于 2012-01-10T08:43:31.043 に答える
0

デバッグの1時間後に見つけた同様のクラッシュの解決策を公開するつもりです、多分それは誰かのために役立つでしょう...理由はとても愚かなことにありました。NSLogには2つのプレースホルダーがあり、実変数は1つだけでした。

NSLog(@"lastItemDate = %@ unixtime = %@", lastItemDate);
于 2013-03-15T23:55:46.237 に答える