Можно ли заставить отладчик отображать имя функции, на которую указывает объект функции повышения?

При отладке кода с использованием функции повышения и привязки в Visual Studio я хотел бы, чтобы отладчик отображал информацию о фактической функции, на которую указывает функтор повышения. Например, имя функции, подпись исходной функции (до того, как с ней была использована привязка) или состояние функтора.

На данный момент мне нужно пройтись по коду, чтобы узнать, что это за функция, и для этого сначала нужно пройти весь код ускорения.

Кто-нибудь знает, было ли это сделано или даже можно ли?

Спасибо!

Изменить. Я также был бы очень рад узнать, что к настоящему времени кто-то разработал ответ на этот вопрос: Как отлаживать код, который использует ускорение без потери рассудка?

(Я имею в виду проблему, упомянутую в принятый ответ: Как перешагнуть через код повышения, но все же войти в код, вызываемый функцией boost :: ...)


person Vickster    schedule 03.07.2009    source источник


Ответы (2)


Существует инициатива по созданию визуализаторов отладки. Уже есть визуализаторы отладки для разных типов (вариант, multi_index, shared_ptr и другие).

К сожалению, boost :: function нет, но вы можете написать визуализатор самостоятельно, как описано там (и, возможно, отправить его в boost;). В качестве альтернативы вы можете сделать запрос, чтобы написать его для вас.

С уважением,
Ованес

person ovanes    schedule 03.07.2009

Используя визуальную студию и ее визуализатор отладки, на что указывает 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) ) }
person Dodo    schedule 03.03.2011