2011-01-10 12 views
5

は、以下の私のC++のコードを考えてみましょう。面白いのは、 "by"変数です。 byを含む単純な式のウォッチを追加しようとすると、結果はCXX0030になります。エラー:式を評価できません。私は、次の時計を追加する場合、例えばのVisual Studio表現

は、return 0にブレークポイントに、私が言及した結果を得る:

by : 10 
bx : 20 
by + 5 : CXX0030: Error: expression cannot be evaluated 
bx + 5 : 25 
by + bx : CXX0030: Error: expression cannot be evaluated 
(by) + bx : 30 
by + (bx) : CXX0030: Error: expression cannot be evaluated 
bx + (by) : CXX0014: Error: missing operrand 

これは、複数のコンピュータ上でVS2010、VS2008で発生します。

さらに、好奇心の中で、 "by"は何が起こっていますか?それは何か変わった演算子ですか?なぜbxは同じ治療を受けていないのですか?この興味をそそら

(私はこれでGoogleを試みたが、「によって」のような用語をいくつかの関連するヒットを取得することは非常に困難である)

+2

ファイルバグレポート、私もここでそれを持っている – stijn

+0

ああ、私の希望は、これは隠された機能のいくつかの種類であることを、次のとおりです。ただ、Dではありません普通のバグ。 –

+1

「欠けているオペランド」は、特に眉を上げることです。 – aschepler

答えて

7

ここには、C++式評価ツールのBY演算子の実装があります。式BYの使用は、ローカル変数の代わりに演算子として解釈されています。

参考:http://msdn.microsoft.com/en-us/library/56638b75.aspx

議論の多くは、この動作はバグであるかどうかに、または設計によって行ってきました。残念ながら、それはその機能を実装した人々によって本当に答えられるだけです。このような状況に不満を抱いているように、なぜこれが明示的に行われたのかについての正当な理由があるかもしれません(曖昧さを解消するためのコストが念頭に置かれます)。あるいは、これは単純に実装者の監督にすぎないかもしれません。再び彼らは答えを知っているだけです。

これはあなたにバグのように感じる場合は、接続時にバグを報告してください。これはあなたの意見を聞くための最良の方法であり、チームはこの行動に関するフィードバックを一度も受け取っていない可能性が高い(私の検索では何も見つかりませんでした)。

+0

"これは仕様です。私が別の場所で言ったように、もう1つのMicrosoftのコックアップ。どのような愚かなデザインの決定! – TonyK

+0

@TonyK非常に具体的に名前のついた変数をデバッグできないという代償を払って、デバッガの全機能を有効にしています...私はそれを勝利と呼んでいます。はい、彼らはこのシナリオをシムにするためにもっと多くのことをすることができたかもしれませんが、周囲の仕事の極端な容易さを考えれば、まだ勝利です。 – JaredPar

+0

回避策?どのような回避策ですか?回避策は、アセンブリ言語式の前に特殊文字を付けることでした。 '@'、 例えば。それはシムですか?私はこの用語に慣れていない。 – TonyK

8

、私はいくつかの掘削をしました。 this linkから、デバッガのネイティブC/C++式評価プログラムがアセンブリ言語式を処理することがわかります。 Assembly-language linkに続いて、アセンブリ言語式でBYがBYTEの略語であることがわかります。だから別のマイクロソフトコックアップ

+0

編集と削除されたコメントをロールバックして、2つの間に不連続がないようにします。しかし、バッジをお楽しみください! :) –

+0

@Bill the Lizard:退屈な古いおならをあなたに呼んでもらえれば幸いです。 – TonyK

+0

@TonyK:私の芝生から降りて! ;) –

4

デバッガの'memory operator'あるに実行しているもの:

In native C++, debugger expressions do support the following additional operators:

  • The context operator ({ }) to specify the context of a symbol. For more information, see Context Operator (C/C++ Language Expressions).

  • Memory operators (BY, WO, and DW) to access memory. Memory operators have the lowest precedence of any operator. The memory operators are useful mainly in debugging assembly-language code.

関連する問題