Я считаю, что это ошибка в визуализаторе отладчика Visual Studio.Самое близкое решение, которое я нашел, - это изменить запись forward_list
в autoexp.dat
(обычно находится в %VSINSTALLDIR%\Common7\Packages\Debugger\
)
В файле должен быть раздел со следующим:
;------------------------------------------------------------------------------
; std::forward_list from <forward_list>
;------------------------------------------------------------------------------
std::forward_list<*>{
preview (
#(
"(",
#list(
head: $e._Myhead,
next: _Next
) : $e._Myval,
")"
)
)
children (
#list(
head: $e._Myhead,
next: _Next
) : $e._Myval
)
}
Заменить на:
;------------------------------------------------------------------------------
; std::forward_list from <forward_list>
;------------------------------------------------------------------------------
std::forward_list<*>{
preview (
#(
"(",
#(
$e._Myhead->_Myval,
",",
#list(
head: $e._Myhead->_Next,
next: _Next
) : $e._Myval,
),
")"
)
)
children (
#(
[actual 0]: $e._Myhead->_Myval,
#list(
head: $e._Myhead->_Next,
next: _Next
) : $e._Myval
)
)
}
Это не отличное решение.Дочерние элементы отображаются как [actual 0], [0], [1], ...
, а не [0], [1], [2], ...
, т. Е. Элемент x
помечен [x-1]
.
Однако вы можете изменить autoexp.dat
, не закрывая Visual Studio, вам просто нужно перезапустить отладчик,Поэтому я бы порекомендовал использовать этот хак столько, сколько вам нужно для отладки конкретной проблемы, а затем вернуться к исходному autoexp.dat
.