7

コードは何の影響も与えてはならない どこでも実行可能であるべき コンパイラの警告を生成しない

基本的に、NSAssert を実行したい場合があります。ただし、NSAssert ではなく、自分で if {} を実行したい場合があります。そうすれば、ブレークポイントを簡単に設定または設定解除できます

現在、これは私がしていることです。

if (entityName==@"Business")
{
    error=nil; //Some code for breakpoint. I want something that do nothing actually.
}

たまたま、もう使用しない error という名前の変数があります。しかし、良い代替案は何でしょうか

[nil donothing] も試しました。しかし、それはコンパイルエラーになりました。

4

5 に答える 5

8

これを試して:

while (false);

if (false)セミコロンが 1 つだけの行など、他の可能性もありますが、そのような;場合、コンパイラがコードの空のビットを単純に削除するため、次の命令で実行が停止します。を使用whileすると、その行で実行が停止するという利点があります (もちろん、そこにブレークポイントを設定すると仮定します)。

于 2012-09-25T09:12:44.747 に答える
3

ブレークポイントに条件を与え、オプションとコマンドを押したままブレークポイントをクリックすると、ポップアップが表示されます。「状態」フィールドには、次のようなものを入力できます

[entityName isEqualToString:@"Business"]

(後者は文字列自体の文字ではなくポインターを比較するため、文字列を-isEqualToString:notと比較する必要があることに注意してください。)==

ブレークポイントで条件を使用することにより、if ステートメントはまったく必要なくなり、再コンパイルせずにチェックを有効または無効にすることもできます。メッセージを自動的にログに記録したり、デバッガー コマンドを実行したりするなど、ブレークポイントの設定でできることは他にもたくさんあります。

于 2012-09-25T08:51:36.127 に答える
3

C では、行にセミコロンだけを入れるだけでノーオペレーション命令を作成できます。

if (TRUE) {
  ; // Neutral operation
} 

Objective-C でも同じことができます。ここでわかるように、プログラムは次の行の前で停止します。

ここに画像の説明を入力

于 2012-09-25T09:03:21.633 に答える
2

2 つの文字列を直接比較しないでください。[NSString isEqualToString:] を試してください

于 2012-09-25T08:45:59.067 に答える
0

あなたが使用することができます__asm int 3;

if ([entityName isEqualToString:@"Business"]) {
    __asm int 3;
} 

CFInternal.hから。

#if defined(__ppc__) || defined(__ppc64__)
#define HALT asm __volatile__("trap")
#elif defined(__i386__) || defined(__x86_64__)
#if defined(__GNUC__)
#define HALT asm __volatile__("int3")
#elif defined(_MSC_VER)
#define HALT __asm int 3;
#else
#error Compiler not supported
#endif
#endif
if ([entityName isEqualToString:@"Business"]) {
    HALT;
} 
于 2012-09-25T08:59:03.390 に答える