Rollup merge of #79184 - nanguye2496:nanguye2496/fix_slice_and_str_type_name, r=varkor
Stop adding '*' at the end of slice and str typenames for MSVC case When computing debug info for MSVC debuggers, Rust compiler emits C++ style type names for compatibility with .natvis visualizers. All Ref types are treated as equivalences of C++ pointers in this process, and, as a result, their type names end with a '\*'. Since Slice and Str are treated as Ref by the compiler, their type names also end with a '\*'. This causes the .natvis engine for WinDbg fails to display data of Slice and Str objects. We addressed this problem simply by removing the '*' at the end of type names for Slice and Str types. Debug info in WinDbg before the fix:  Debug info in WinDbg after the fix:  This change has also been tested with debuggers for Visual Studio, VS Code C++ and VS Code LLDB to make sure that it does not affect the behavior of other kinds of debugger.
This commit is contained in:
commit
08b171726c
1 changed files with 8 additions and 1 deletions
|
@ -94,7 +94,14 @@ pub fn push_debuginfo_type_name<'tcx>(
|
|||
push_debuginfo_type_name(tcx, inner_type, true, output, visited);
|
||||
|
||||
if cpp_like_names {
|
||||
output.push('*');
|
||||
// Slices and `&str` are treated like C++ pointers when computing debug
|
||||
// info for MSVC debugger. However, adding '*' at the end of these types' names
|
||||
// causes the .natvis engine for WinDbg to fail to display their data, so we opt these
|
||||
// types out to aid debugging in MSVC.
|
||||
match *inner_type.kind() {
|
||||
ty::Slice(_) | ty::Str => {}
|
||||
_ => output.push('*'),
|
||||
}
|
||||
}
|
||||
}
|
||||
ty::Array(inner_type, len) => {
|
||||
|
|
Loading…
Add table
Reference in a new issue