「malloc_error_breakにブレークポイントを設定してデバッグする」方法


126

アプリケーションがクラッシュすることなく、次のような多くのコンソール出力が得られます。

malloc:*オブジェクト0xc6a3970のエラー:解放されるポインターが割り当てられていませんでした*デバッグするためにmalloc_error_breakにブレークポイントを設定します

どのオブジェクトまたは変数が影響を受けているかを知るにはどうすればよいですか?

次のようにシンボリックブレークポイントを設定しようとしましたが、停止しません。

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


1
サファリインスペクションを無効にすることでこの問題を解決します。stackoverflow.com/a/43885754/6521116
Kris Roofe

これの原因の1つは、オブジェクトを返すことになっている関数/メソッドであり、それが関数の最後に到達して何も返さないことです。
Xofo 2018年

回答:


136

ブレークポイントナビゲーター([表示]-> [ナビゲーター]-> [ブレークポイントナビゲーターの表示]または⌘7)を開き、左下隅のプラスボタンをクリックして、[シンボリックブレークポイントの追加]を選択して、malloc_error_break()にブレークポイントを設定します。表示されるポップアップmalloc_error_breakで、[記号]フィールドに入力して、[完了]をクリックします。

編集:openfrogはスクリーンショットを追加し、私が私の回答を投稿した、彼はすでに成功せずにこれらの手順を試みたことを示しました。その編集では、何と言ったらよいかわかりません。私はそれが自分で機能しないことに気づかなかったし、実際、私は常にmalloc_error_breakセットにブレークポイントを設定している。


2
これは私のために(モジュールなしで)うまくいきました。この問題の原因は、UIImageファイルにバックアップされていて、別の画像でファイルを上書きしていたことでした。これにより、UIImagePNGRepresentation元の画像を呼び出したときにエラーが発生しました(ファイルが実際に上書きされたときではありません)。
ロバート

私はの左下隅にあるプラスボタン届かない⌘7バーを...おそらく、あなたは意味しましたか⌘8
ScottyBlades

ショートカットを推測する@ScottyBladesが変更されました。私はこの回答を8年前と7つの主要なXcodeバージョンの前に書いた...
Andrew Madsen

@AndrewMadsen心配ありません。編集する意味があるかどうかを確認するだけです。
ScottyBlades

46

スクリーンショットでは、モジュールを指定していません。「libsystem_c.dylib」を設定してみてください

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

私はそれをしました、そしてそれは機能します:ブレークポイントはここで停止します(スタックトレースはしばしばいくつかのあいまいなシステムlibから上昇します...)


7
iOSではモジュール名が異なるようですlibsystem_malloc.dylib。それは次のとおりです。ブレークポイントは、モジュールを指定しなくても機能します。
Nestor 2014年

6

Xcodeでも同じ問題が発生しました。私はあなたが与えた手順に従いましたが、それはうまくいきませんでした。私が見たすべてのフォーラムで、この問題のすべての手掛かりがあなたが与えたものであるので、私は夢中になりました。私はmalloc_error_breakの後にスペースを置いたのを最後に見た、それを抑制して今は機能する。ばかげた問題ですが、解決策が機能しない場合は、malloc_error_breakの前後にスペースを入れていないことを確認してください。

このメッセージがお役に立てば幸いです。


4

一部のフォルダ(特に/ usr / bin /)に書き込む必要のないアクセス許可を与えていたため、問題が発生しました。ディスクユーティリティを開き、Macintosh HDディスクで[ディスクのアクセス権を修復]を実行して修正しました。


おかげで、これにより、動作しなくなったマシンが修正されました。
Matt Fletcher

2

クローズサファリインスペクターで解決します。私の投稿を参照してください。また、テストのためにアプリを実行したときに音が聞こえることもあります。その後、自動インスペクターをオンにしてSafariを開きます。その後、アプリでアクションを実行すると、この問題が発生します。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.