Skip to content

Commit 263c8e5

Browse files
tevoineachkeita
authored andcommitted
Improve handling of unexpected breakpoints (microsoft#3493)
* Improve handling of unexpected breakpoints * fmt
1 parent 4473756 commit 263c8e5

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

src/agent/coverage/src/record/windows.rs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
use std::collections::BTreeMap;
55
use std::path::Path;
66

7-
use anyhow::{anyhow, bail, Error, Result};
7+
use anyhow::{anyhow, Error, Result};
88
use debuggable_module::debuginfo::{DebugInfo, Function};
99
use debuggable_module::load_module::LoadModule;
1010
use debuggable_module::loader::Loader;
@@ -132,20 +132,24 @@ impl<'cache, 'data> WindowsRecorder<'cache, 'data> {
132132
return Ok(());
133133
}
134134

135-
let breakpoint = self.breakpoints.remove(id);
136-
137-
let Some(breakpoint) = breakpoint else {
138-
let stack = dbg.get_current_stack()?;
139-
bail!("stopped on dangling breakpoint, debuggee stack:\n{}", stack);
140-
};
141-
142-
let coverage = self
143-
.coverage
144-
.modules
145-
.get_mut(&breakpoint.module)
146-
.ok_or_else(|| anyhow!("coverage not initialized for module: {}", breakpoint.module))?;
147-
148-
coverage.increment(breakpoint.offset);
135+
match self.breakpoints.remove(id) {
136+
Some(breakpoint) => {
137+
let coverage = self
138+
.coverage
139+
.modules
140+
.get_mut(&breakpoint.module)
141+
.ok_or_else(|| {
142+
anyhow!("coverage not initialized for module: {}", breakpoint.module)
143+
})?;
144+
145+
coverage.increment(breakpoint.offset);
146+
}
147+
// ASAN can set breakpoints which we don't know about, meaning they're not in `self.breakpoints`
148+
None => {
149+
let stack = dbg.get_current_stack()?;
150+
warn!("stopped on dangling breakpoint, debuggee stack:\n{}", stack);
151+
}
152+
}
149153

150154
Ok(())
151155
}

0 commit comments

Comments
 (0)