2

次のエラーが表示されます

プログラム受信信号: 「EXC_BAD_ACCESS」。
警告: check_safe_call: 現在のフレームを復元できませんでした

警告: 以前に選択したフレームを復元できません。
警告: 以前に選択したフレームを復元できません。

私のアプリはwifi情報を取得することです

libHandle = dlopen("/System/Library/PrivateFrameworks/ MobileWiFi.framework/MobileWiFi",RTLD_LAZY);

open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");

open(&airportHandle);

bind(airportHandle, @"en0");

コードが に到達するopen(&airportHandle)と、エラーが表示されますが、この行で停止するため、わかりません。

どうすればこれを解決できますか?

4

5 に答える 5

6

EXC_BAD_ACCESS エラーの場合、通常、解放されたオブジェクトにメッセージを送信しようとしています。これらを追跡する最良の方法は、NSZombieEnabled使用することです。

これは、オブジェクトを実際に解放することはありませんが、オブジェクトを「ゾンビ」としてラップし、通常は解放されることを示すフラグを内部に設定することによって機能します。このようにして、もう一度アクセスしようとしても、エラーが発生する前に何があったかがわかります。この少しの情報を使用して、通常は後戻りして問題が何であったかを確認できます.

これは、デバッガーが有用な情報をときどき出すバックグラウンド スレッドで特に役立ちます。

ただし、注意すべき非常に重要なことは、これが配布コードではなくデバッグ コードにのみ含まれていることを 100% 確認する必要があるということです。何もリリースされないため、アプリはリーク、リーク、リークを繰り返します。これを行うことを思い出させるために、このログを appdelegate に入れました。

if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled"))
  NSLog(@"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!");

正確な行を見つけるのに助けが必要な場合は、ビルド アンド ラン (CMD-R) の代わりにビルド アンド デバッグ (CMD-Y) を実行してください。アプリがクラッシュすると、デバッガーは正確にどの行を表示し、NSZombieEnabled と組み合わせて、正確な理由を見つけることができるはずです。

于 2009-11-13T06:37:26.557 に答える
1

EXC_BAD_ACCESS は、既に解放したメモリにアクセスするときに常に発生します。あなたのサンプルコードでは、どこairportHandleが初期化されているのか、それとも初期化されているのかわかりません。

初期化されているが、そのコードを投稿するのを忘れた場合は、ハンドルをどこかで解放したかどうかを確認してください。

このようなアクセス違反をデバッグするには、NSZombieEnabledEnvironment フラグをに設定すると便利なことがよくありYESます。これにより、Obj-C ランタイムは解放されたメモリへのアクセスをコンソールに記録します。その情報を Instruments と一緒に使用して問題を見つける方法についての完全なチュートリアルを見つけることができます。

于 2009-11-13T06:20:38.437 に答える
0

私は同じことに取り組んでおり、同じ問題が発生します。open = dlsym(libHandle, "Apple80211Open");デバッグモードに入ると、関数を使用しても 0 のままであることがわかります。

Apple80211Openしたがって、私の意見では、この関数を含まないフレームワークで を探しています。

Apple80211OpenApple80211>iOS 2.x SDK で時代遅れになっているプラ​​イベート フレームワークにあります。3.x および 4.x SDK 用の MobileWifi フレームワークで同等のものは/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi

于 2011-02-01T14:38:08.243 に答える
0

EXC_BAD_ACCESS。主に、将来さらに必要になったオブジェクトをリリースしたときに見つかります。見つけることはできませんが、DEBUG モードにする必要があることを確認するための解決策があります。次に、これらのリンクに従ってください

http://www.codza.com/how-to-debug-exc_bad_access-on-iphone

それは実際に動作します

于 2010-12-01T12:31:28.907 に答える
0

Instruments を使えば簡単にできます: この素晴らしい記事をご覧ください:

http://www.corbinstreehouse.com/blog/2007/10/instruments-on-leopard-how-to-debug-those-random-crashes-in-your-cocoa-app/comment-page-1/#comment -43762

于 2009-11-13T06:39:59.460 に答える