1

ブースト関数とバインドを使用して Visual Studio でコードをデバッグするときに、ブースト ファンクターが指す実際の関数に関する情報をデバッガーに表示できるようにしたいと考えています。たとえば、関数の名前、元の関数のシグネチャ (bind が使用される前)、またはファンクターの状態などです。

現時点では、コードをステップ実行して、それがどの関数であるかを確認する必要があります。そのためには、最初にブースト コードを最後までステップ実行する必要があります。

これが行われたかどうか、またはそれが可能かどうかさえ誰かが知っていますか?

ありがとうございました!

編集私はまた、誰かがこの質問に対する答えを今までに開発したことを知ってとてもうれしく思います: How to debug code that uses boost w/o loss sanity?

(受け入れられた回答で言及されている問題を意味します:ブーストコードをステップオーバーするが、ブースト::関数によって呼び出されるコードにステップインする方法...)

4

2 に答える 2

2

デバッグ ビジュアライザーを作成するためのイニシアチブがboostにあります。さまざまなタイプ (variant、multi_index、shared_ptr など) のデバッグ ビジュアライザーが既に存在します。

残念ながら、boost::function はありませんが、そこに記述されているように自分でビジュアライザーを作成できます (そして、boost ; に送信することもできます)。または、あなたのためにそれを書くように要求することもできます。

よろしく、
オバネス

于 2009-07-03T14:46:20.353 に答える
0

Visual Studio とその Debug Visualizer を使用すると、ovanes が指すように、変数にカーソルを合わせると、指定された関数を取得できます。

この投稿をスパムでいっぱいにしたくないので、ここでは最初の 12 の関数タイプのみを提供します。本当にもっと必要な場合は、拡張できる可能性があります。同様のコードをブースト ドキュメント開発者に送信しましたが、最終的にはそこでも公開される予定です。

現在、関数オブジェクトに実際に何もバインドされていない場合、このビジュアライザー タイプは多かれ少なかれゴミを表示します。また、これはやや初期のドラフトであることに注意してください。


boost::function0<*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function1<*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function2<*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function3<*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function4<*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function5<*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function6<*,*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function7<*,*,*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function8<*,*,*,*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function9<*,*,*,*,*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function10<*,*,*,*,*,*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function11<*,*,*,*,*,*,*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
boost::function12<*,*,*,*,*,*,*,*,*,*,*,*,*> { preview( #("func=", $e.functor.bound_memfunc_ptr.memfunc_ptr) ) }
于 2011-03-03T14:51:56.270 に答える