diff options
| author | MaulingMonkey <git@maulingmonkey.com> | 2019-05-19 17:10:48 -0700 |
|---|---|---|
| committer | MaulingMonkey <git@maulingmonkey.com> | 2019-05-19 17:10:48 -0700 |
| commit | e33c4415b3a504bd723328a38bce0f14786db61b (patch) | |
| tree | 982db452475038e31d71f37e7a8f673017c6fb6d /src/test | |
| parent | 26ab32499c0114ae6e01e76374ae06bcd7a973bd (diff) | |
| download | rust-e33c4415b3a504bd723328a38bce0f14786db61b.tar.gz rust-e33c4415b3a504bd723328a38bce0f14786db61b.zip | |
Add basic CDB support to debuginfo compiletest s, to help catch `*.natvis` regressions, like those fixed in #60687.
Several Microsoft debuggers (VS, VS Code, WinDbg, CDB, ...) consume the `*.natvis` files we embed into rust `*.pdb` files.
While this only tests CDB, that test coverage should help for all of them.
CHANGES
src\bootstrap
- test.rs: Run CDB debuginfo tests on MSVC targets
src\test\debuginfo
- issue-13213.rs: CDB has trouble with this, skip for now (newly discovered regression?)
- pretty-std.rs: Was ignored, re-enable for CDB only to start with, add CDB tests.
- should-fail.rs: Add CDB tests.
src\tools\compiletest:
- Added "-cdb" option
- Added Mode::DebugInfoCdb ("debuginfo-cdb")
- Added run_debuginfo_cdb_test[_no_opt]
- Renamed Mode::DebugInfoBoth -> DebugInfoGdbLldb ("debuginfo-gdb+lldb") since it's no longer clear what "Both" means.
- Find CDB at the default Win10 SDK install path "C:\Program Files (x86)\Windows Kits\10\Debugger\*\cdb.exe"
- Ignore CDB tests if CDB not found.
ISSUES
- `compute_stamp_hash`: not sure if there's any point in hashing `%ProgramFiles(x86)%`
- `OsString` lacks any `*.natvis` entries (would be nice to add in a followup changelist)
- DSTs (array/string slices) which work in VS & VS Code fail in CDB.
- I've avoided `Mode::DebugInfoAll` as 3 debuggers leads to pow(2,3)=8 possible combinations.
REFERENCE
CDB is not part of the base Visual Studio install, but can be added via the Windows 10 SDK:
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
Installing just "Debugging Tools for Windows" is sufficient.
CDB appears to already be installed on appveyor CI, where this changelist can find it, based on it's use here:
https://github.com/rust-lang/rust/blob/0ffc57311030a1930edfa721fe57d0000a063af4/appveyor.yml#L227
CDB commands and command line reference:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-reference
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/debuginfo/issue-13213.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/pretty-std.rs | 53 | ||||
| -rw-r--r-- | src/test/debuginfo/should-fail.rs | 7 |
3 files changed, 59 insertions, 2 deletions
diff --git a/src/test/debuginfo/issue-13213.rs b/src/test/debuginfo/issue-13213.rs index 3c9a365fd4f..393478460d4 100644 --- a/src/test/debuginfo/issue-13213.rs +++ b/src/test/debuginfo/issue-13213.rs @@ -1,4 +1,5 @@ // min-lldb-version: 310 +// ignore-cdb: Fails with exit code 0xc0000135 ("the application failed to initialize properly") // aux-build:issue-13213-aux.rs diff --git a/src/test/debuginfo/pretty-std.rs b/src/test/debuginfo/pretty-std.rs index 82802eff08a..f568371d68a 100644 --- a/src/test/debuginfo/pretty-std.rs +++ b/src/test/debuginfo/pretty-std.rs @@ -1,6 +1,5 @@ -// ignore-windows failing on win32 bot // ignore-freebsd: gdb package too new -// ignore-test // Test temporarily ignored due to debuginfo tests being disabled, see PR 47155 +// only-cdb // Test temporarily ignored on GDB/LLDB due to debuginfo tests being disabled, see PR 47155 // ignore-android: FIXME(#10381) // compile-flags:-g // min-gdb-version 7.7 @@ -63,6 +62,56 @@ // lldb-check:[...]$5 = None +// === CDB TESTS ================================================================================== + +// cdb-command: g + +// cdb-command: dx slice,d +// cdb-check:slice,d [...] +// NOTE: While slices have a .natvis entry that works in VS & VS Code, it fails in CDB 10.0.18362.1 + +// cdb-command: dx vec,d +// cdb-check:vec,d [...] : { size=4 } [Type: [...]::Vec<u64>] +// cdb-check: [size] : 4 [Type: [...]] +// cdb-check: [capacity] : [...] [Type: [...]] +// cdb-check: [0] : 4 [Type: unsigned __int64] +// cdb-check: [1] : 5 [Type: unsigned __int64] +// cdb-check: [2] : 6 [Type: unsigned __int64] +// cdb-check: [3] : 7 [Type: unsigned __int64] + +// cdb-command: dx str_slice +// cdb-check:str_slice [...] +// NOTE: While string slices have a .natvis entry that works in VS & VS Code, it fails in CDB 10.0.18362.1 + +// cdb-command: dx string +// cdb-check:string : "IAMA string!" [Type: [...]::String] +// cdb-check: [<Raw View>] [Type: [...]::String] +// cdb-check: [size] : 0xc [Type: [...]] +// cdb-check: [capacity] : 0xc [Type: [...]] +// cdb-check: [0] : 73 'I' [Type: char] +// cdb-check: [1] : 65 'A' [Type: char] +// cdb-check: [2] : 77 'M' [Type: char] +// cdb-check: [3] : 65 'A' [Type: char] +// cdb-check: [4] : 32 ' ' [Type: char] +// cdb-check: [5] : 115 's' [Type: char] +// cdb-check: [6] : 116 't' [Type: char] +// cdb-check: [7] : 114 'r' [Type: char] +// cdb-check: [8] : 105 'i' [Type: char] +// cdb-check: [9] : 110 'n' [Type: char] +// cdb-check: [10] : 103 'g' [Type: char] +// cdb-check: [11] : 33 '!' [Type: char] + +// cdb-command: dx os_string +// cdb-check:os_string [Type: [...]::OsString] +// NOTE: OsString doesn't have a .natvis entry yet. + +// cdb-command: dx some +// cdb-check:some : { Some 8 } [Type: [...]::Option<i16>] +// cdb-command: dx none +// cdb-check:none : { None } [Type: [...]::Option<i64>] +// cdb-command: dx some_string +// cdb-check:some_string : { Some "IAMA optional string!" } [Type: [...]::Option<[...]::String>] + #![allow(unused_variables)] use std::ffi::OsString; diff --git a/src/test/debuginfo/should-fail.rs b/src/test/debuginfo/should-fail.rs index 8765c018b10..1e0d22cbce4 100644 --- a/src/test/debuginfo/should-fail.rs +++ b/src/test/debuginfo/should-fail.rs @@ -18,6 +18,13 @@ // lldb-command:print x // lldb-check:[...]$0 = 5 +// === CDB TESTS ================================================================================== + +// cdb-command:g + +// cdb-command:dx x +// cdb-check:string [...] : 5 [Type: [...]] + fn main() { let x = 1; |
