1

在 Visual Studio 中使用 boost 函数和绑定调试代码时,我希望能够让调试器显示有关 boost 函子所指向的实际函数的信息。例如函数的名称、原始函数的签名(在使用 bind 之前)或函子的状态。

目前我必须单步执行代码以找出它是哪个函数,这需要首先单步执行 boost 代码。

有谁知道这是否已经完成,或者即使它可以完成?

谢谢!

编辑我也很高兴发现有人已经开发了这个问题的答案:如何调试使用 boost w/o 失去理智的代码?

(我的意思是接受的答案中提到的问题:How to step over the boost code but still step into the code called by boost::function...)

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 doc 开发人员,最终它也会在那里发布。

目前,当实际上没有任何东西绑定到函数对象时,这种可视化器类型将显示或多或少的垃圾。请注意,这在某种程度上是一个早期的草案。


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 回答