make missing symbols for coverage tasks more explicit (#554)

This moves from:

```
"Error: coverage extraction from C:\users\bcaswell\projects\bugs\andrew-coverage-fail\setup\oft-setup-5c77cfe1b181520ab0b33a16286a690a\fuzz.exe failed when processing file "11f6ad8ec52a2984abaafd7c3b516503785c2072".  target appears to be missing sancov instrumentation",
```

To even more explicit:
```
Error: Target appears to be missing sancov instrumentation.  This error can happen due to missing coverage symbols.
target_exe: C:\users\bcaswell\projects\bugs\andrew-coverage-fail\setup\oft-setup-5c77cfe1b181520ab0b33a16286a690a\fuzz.exe
input: "11f6ad8ec52a2984abaafd7c3b516503785c2072"
debugger stdout:
...
[+] disabling sympath
[+] processing fuzz.exe
[+] no tables  fuzz.exe
[+] processing C:\WINDOWS\SYSTEM32\kernel.appcore.dll
[+] no tables  C:\WINDOWS\SYSTEM32\kernel.appcore.dll
[+] processing C:\WINDOWS\System32\KERNELBASE.dll
[+] no tables  C:\WINDOWS\System32\KERNELBASE.dll
[+] processing C:\WINDOWS\System32\RPCRT4.dll
[+] no tables  C:\WINDOWS\System32\RPCRT4.dll
[+] processing C:\WINDOWS\System32\msvcrt.dll
[+] no tables  C:\WINDOWS\System32\msvcrt.dll
[+] processing C:\WINDOWS\System32\KERNEL32.DLL
[+] no tables  C:\WINDOWS\System32\KERNEL32.DLL
[+] processing ntdll.dll
[+] no tables  ntdll.dll
Error: unable to find sancov counter symbols [at DumpCounters (line 114 col 9)]
...
```
This commit is contained in:
bmc-msft
2021-02-17 11:34:09 -05:00
committed by GitHub
parent ce47e4924a
commit 89d7f060dd

View File

@ -25,6 +25,8 @@ pub struct CoverageRecorder {
script_dir: OwnedDir, script_dir: OwnedDir,
} }
const SYMBOL_EXTRACT_ERROR: &str = "Target appears to be missing sancov instrumentation. This error can also happen if symbols for the target are not available.";
impl CoverageRecorder { impl CoverageRecorder {
pub fn new(config: Arc<Config>) -> Self { pub fn new(config: Arc<Config>) -> Self {
let script_dir = let script_dir =
@ -57,28 +59,19 @@ impl CoverageRecorder {
let script = self.invoke_debugger_script(test_input, &coverage_path)?; let script = self.invoke_debugger_script(test_input, &coverage_path)?;
let output = script.wait_with_output().await?; let output = script.wait_with_output().await?;
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
if !output.status.success() { if !output.status.success() {
let err = format_err!("coverage recording failed: {}", output.status); let err = format_err!("coverage recording failed: {}", output.status);
error!("{}", err); error!("{}", err);
error!( error!("recording stderr: {}", stderr);
"recording stderr: {}", error!("recording stdout: {}", stdout);
String::from_utf8_lossy(&output.stderr)
);
error!(
"recording stdout: {}",
String::from_utf8_lossy(&output.stdout)
);
return Err(err); return Err(err);
} else { } else {
debug!( debug!("recording stderr: {}", stderr);
"recording stderr: {}", debug!("recording stdout: {}", stdout);
String::from_utf8_lossy(&output.stderr)
);
debug!(
"recording stdout: {}",
String::from_utf8_lossy(&output.stdout)
);
} }
if !has_files(&coverage_path).await? { if !has_files(&coverage_path).await? {
@ -96,9 +89,12 @@ impl CoverageRecorder {
.ok_or_else(|| format_err!("unable to identify coverage input filename"))?; .ok_or_else(|| format_err!("unable to identify coverage input filename"))?;
bail!( bail!(
"coverage extraction from {} failed when processing file {:?}. target appears to be missing sancov instrumentation", "{}\ntarget_exe: {}\ninput: {:?}\ndebugger stdout: {}\ndebugger stderr: {}",
SYMBOL_EXTRACT_ERROR,
self.config.target_exe.display(), self.config.target_exe.display(),
filename filename,
stdout,
stderr
); );
} }