1

私は Objective-C で動的ライブラリを作成していますが、最近、dylib をロードするとすぐに segfault クラッシュが発生するという非常に奇妙な問題が発生し始めました。問題は、これがリリース ビルドでのみ発生することです。デバッグ ビルドは問題なく動作します。クラッシュに関連するスタック トレースの例を次に示します。

Terminating due to signal Segmentation fault: 11; backtrace: (
    0   <redacted>.dylib                    0x003417a9 SignalHandler + 52
    1   libsystem_c.dylib                   0x39cded33 _sigtramp + 34
    2   CoreFoundation                      0x31abaac9 CFRelease + 1104
    3   ???                                 0x2ff07629 0x0 + 804288041
    4   ???                                 0x2ff04a39 0x0 + 804276793
    5   ???                                 0x2ff04875 0x0 + 804276341
    6   ???                                 0x2fefdfff 0x0 + 804249599
    7   ???                                 0x2ff01a47 0x0 + 804264519
    8   libdyld.dylib                       0x39c97949 dlopen + 48
    9   CoreFoundation                      0x31b31b11 <redacted> + 116
    10  CoreFoundation                      0x31b067cb _CFBundleLoadExecutableAndReturnError + 418
    11  Foundation                          0x32424159 <redacted> + 848

コードを少し試して、クラッシュの原因をコード内の単一のコンストラクターに絞り込みました。このコンストラクターを削除すると、クラッシュは発生しなくなります。しかし、コンストラクターにステートメントを含めるほどのことをするprintfと、クラッシュが再発します。これがそれを引き起こすのと同じくらい簡単なもの:

static void __attribute__((constructor)) TestConstructor() {
    printf("THIS IS A TEST");
}

また、他のファイル (すべて静的に宣言されている) に他のコンストラクター関数があり、それらのそれぞれが正常に機能することにも言及する必要があります。クラッシュを引き起こしているのはこの特定のコンストラクターであり、それが私を本当に混乱させているのです。

何か案は?ここからさらにデバッグする方法がわかりません。

4

0 に答える 0