rust/tests/debuginfo/embedded-visualizer.rs
Martin Nordholts 5b57d02e9f compiletest: Use //@ prefixes also for debuginfo test directives
So that when we later add support for revisions we can use the same
syntax for revisions as elsewhere.

This also prevents people from making typos for commands since
`src/tools/compiletest/src/directives/directive_names.rs` will catch such
typos now.

Note that we one FIXME for a non-trivial change for later:
```
// FIXME(148097): Change `// cdb-checksimple_closure` to `//@ cdb-check:simple_closure`
```
2025-11-25 06:13:45 +01:00

112 lines
3.5 KiB
Rust

//@ compile-flags:-g
//@ ignore-lldb
//@ ignore-windows-gnu: #128981
// === CDB TESTS ==================================================================================
//@ cdb-command: g
// The .nvlist command in cdb does not always have a deterministic output
// for the order that NatVis files are displayed.
//@ cdb-command: .nvlist
//@ cdb-check: [...].exe (embedded NatVis "[...]embedded_visualizer-0.natvis")
//@ cdb-command: .nvlist
//@ cdb-check: [...].exe (embedded NatVis "[...]embedded_visualizer-1.natvis")
//@ cdb-command: .nvlist
//@ cdb-check: [...].exe (embedded NatVis "[...]embedded_visualizer-2.natvis")
//@ cdb-command: dx point_a
//@ cdb-check:point_a : (0, 0) [Type: embedded_visualizer::point::Point]
//@ cdb-check: [<Raw View>] [Type: embedded_visualizer::point::Point]
//@ cdb-check: [x] : 0 [Type: int]
//@ cdb-check: [y] : 0 [Type: int]
//@ cdb-command: dx point_b
//@ cdb-check:point_b : (5, 8) [Type: embedded_visualizer::point::Point]
//@ cdb-check: [<Raw View>] [Type: embedded_visualizer::point::Point]
//@ cdb-check: [x] : 5 [Type: int]
//@ cdb-check: [y] : 8 [Type: int]
//@ cdb-command: dx line
//@ cdb-check:line : ((0, 0), (5, 8)) [Type: embedded_visualizer::Line]
//@ cdb-check: [<Raw View>] [Type: embedded_visualizer::Line]
//@ cdb-check: [a] : (0, 0) [Type: embedded_visualizer::point::Point]
//@ cdb-check: [b] : (5, 8) [Type: embedded_visualizer::point::Point]
//@ cdb-command: dx person
//@ cdb-check:person : "Person A" is 10 years old. [Type: dependency_with_embedded_visualizers::Person]
//@ cdb-check: [<Raw View>] [Type: dependency_with_embedded_visualizers::Person]
//@ cdb-check: [name] : "Person A" [Type: alloc::string::String]
//@ cdb-check: [age] : 10 [Type: int]
// === GDB TESTS ===================================================================================
//@ gdb-command: run
//@ gdb-command: info auto-load python-scripts
//@ gdb-check:Yes pretty-printer-embedded_visualizer-0
//@ gdb-check:Yes pretty-printer-embedded_visualizer-1
//@ gdb-command: print point_a
//@ gdb-check:$1 = (0, 0)
//@ gdb-command: print point_b
//@ gdb-check:$2 = (5, 8)
//@ gdb-command: print line
//@ gdb-check:$3 = ((0, 0), (5, 8))
//@ gdb-command: print person
//@ gdb-check:$4 = "Person A" is 10 years old.
#![allow(unused_variables)]
#![debugger_visualizer(natvis_file = "embedded-visualizer.natvis")]
#![debugger_visualizer(gdb_script_file = "embedded-visualizer.py")]
//@ aux-build: dependency-with-embedded-visualizers.rs
//@ ignore-backends: gcc
extern crate dependency_with_embedded_visualizers;
use dependency_with_embedded_visualizers::Person;
#[debugger_visualizer(natvis_file = "embedded-visualizer-point.natvis")]
#[debugger_visualizer(gdb_script_file = "embedded-visualizer-point.py")]
mod point {
pub struct Point {
x: i32,
y: i32,
}
impl Point {
pub fn new(x: i32, y: i32) -> Point {
Point { x: x, y: y }
}
}
}
use point::Point;
pub struct Line {
a: Point,
b: Point,
}
impl Line {
pub fn new(a: Point, b: Point) -> Line {
Line { a: a, b: b }
}
}
fn main() {
let point_a = Point::new(0, 0);
let point_b = Point::new(5, 8);
let line = Line::new(point_a, point_b);
let name = String::from("Person A");
let person = Person::new(name, 10);
zzz(); // #break
}
fn zzz() {
()
}