2009-07-03 4 views
1

Beim Debuggen von Code mit Boost-Funktion und Bindung in Visual Studio möchte ich in der Lage sein, den Debugger Informationen über die tatsächliche Funktion anzeigen zu lassen, auf die der Boost-Funktor zeigt. Zum Beispiel der Name der Funktion, die Signatur der ursprünglichen Funktion (bevor bind verwendet wurde) oder der Status des Funktors.Ist es möglich, dass der Debugger den Namen der Funktion anzeigt, auf die ein Boost-Funktionsobjekt zeigt?

Im Moment muss ich durch den Code gehen, um herauszufinden, welche Funktion es ist, und das erfordert, den Boost-Code zuerst den ganzen Weg zu durchlaufen.

Weiß jemand, ob dies getan wurde oder sogar wenn es getan werden kann?

Vielen Dank!

bearbeiten Ich würde auch sehr glücklich sein, um herauszufinden, dass jemand eine Antwort auf diese Frage inzwischen entwickelt hat: How to debug code that uses boost w/o losing sanity?

(ich das Problem, das im Bereich der accepted answer erwähnt: Wie über die Boost-Schritt Code aber immer noch Schritt in den Code durch die boost :: -Funktion aufgerufen ...)

Antwort

2

Es gibt eine Initiative in boost zu machen debug visualizers. Es gibt bereits Debug-Visualisierer für verschiedene Typen (variant, multi_index, shared_ptr und mehr).

Leider boost :: function ist nicht da, aber Sie können einen Visualizer wie beschrieben dort selbst schreiben (und vielleicht an Boost senden;). Alternativ können Sie eine Anfrage stellen, um eine für Sie zu schreiben.

Grüße,
Ovanes

+0

Vielen Dank! – Vickster

0

Visual Studio und es Debug Visualizer, von Ovanes wie gezeigt wird, ist es möglich, die spitze zu funktionieren, wenn die Maus über die Variable zu bekommen.

Da ich diesen Beitrag nicht voll spammen möchte, stelle ich hier nur die ersten 12 Funktionstypen vor. Wenn Sie wirklich mehr brauchen, werden Sie wahrscheinlich in der Lage sein, es zu erweitern. Ich habe einen ähnlichen Code an einen Boost-Doc-Entwickler gesendet und wird ihn dort auch veröffentlichen.

Derzeit wird dieser Visualizer-Typ mehr oder weniger Müll anzeigen, wenn nichts tatsächlich an ein Funktionsobjekt gebunden ist. Und bitte beachten Sie, dass dies ein früher Entwurf ist.


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)) } 
Verwandte Themen