Very long symbols get truncated and debug visualizers can't match - by stheophil

Status : 

  By Design<br /><br />
		The product team believes this item works according to its intended design.<br /><br />
		A more detailed explanation for the resolution of this particular item may have been provided in the comments section.


2
0
Sign in
to vote
ID 776886 Comments
Status Closed Workarounds
Type Bug Repros 0
Opened 1/18/2013 2:50:46 AM
Access Restriction Public

Description

I encounter very long symbol due to expanded typedefs and template magic. The VC compiler does not keep track of original typedefs as clang does and expands them all. The symbols get truncated at some max length like the following example. This makes the symbols illegible and worse, the debug visualizers cannot match anymore. Example:


boost::intrusive::list<
	set_partition_base<boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
		boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
		std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
		std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
		std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline> > > >,
		boost::use_default,boost::use_default>,
		boost::use_default,boost::use_default>,
		
		STargetPosition,
		F2wayFrom3way<fn_compare,boost::algorithm::is_less>,
		set_partition_value_traits<
		boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
		boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
		std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
		std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
		std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline> > > >,
		boost::use_default,boost::use_default>,boost::use_default,boost::use_default> > 
	>::part,
	boost::intrusive::member_hook<
		set_partition_base<
			boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
			boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
			std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
			std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
			std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline> > > >,
			boost::use_default,boost::use_default>,boost::use_default,boost::use_default>,
			STargetPosition,
			F2wayFrom3way<fn_compare,boost::algorithm::is_less>,
			set_partition_value_traits<
			boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
			boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
			std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
			std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
			std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,v48134b84270b613575081ef18293cc09
Sign in to post a comment.
Posted by stheophil on 2/8/2013 at 1:03 AM
Why did I expect this?

Of course the behavior is not by accident but because you use strings with 16bit size fields or whatever. The problem is that your debugger does not support valid C++ programs.
Posted by Microsoft on 2/7/2013 at 2:51 PM
Hi stheophil,

Thanks for submitting this bug. After careful consideration, we've decided not to fix this bug because our compiler has certain internal limitations on the lengths of symbol names.

Karl Niu
VC++ Team
Posted by Microsoft on 1/21/2013 at 1:01 AM
Thanks for your feedback.

We are rerouting this issue to the appropriate group within the Visual Studio Product Team for triage and resolution. These specialized experts will follow-up with your issue.
Posted by Microsoft on 1/18/2013 at 3:50 AM
Thank you for your feedback, we are currently reviewing the issue you have submitted. If this issue is urgent, please contact support directly(http://support.microsoft.com)