Improve panic logging

Conrad Irwin created

Send along every symbol for inlined frames, and also include the address
(and if we have it filename + lineno)

Change summary

crates/zed/src/main.rs | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)

Detailed changes

crates/zed/src/main.rs 🔗

@@ -542,7 +542,22 @@ fn init_panic_hook(app: &App, installation_id: Option<String>, session_id: Strin
         let mut backtrace = backtrace
             .frames()
             .iter()
-            .filter_map(|frame| Some(format!("{:#}", frame.symbols().first()?.name()?)))
+            .flat_map(|frame| {
+                frame.symbols().iter().filter_map(|symbol| {
+                    let name = symbol.name()?;
+                    let addr = symbol.addr()? as usize;
+                    let position = if let (Some(path), Some(lineno)) = (
+                        symbol.filename().and_then(|path| path.file_name()),
+                        symbol.lineno(),
+                    ) {
+                        format!("{}:{}", path.to_string_lossy(), lineno)
+                    } else {
+                        "?".to_string()
+                    };
+
+                    Some(format!("{:} ({:#x}) at {}", name, addr, position))
+                })
+            })
             .collect::<Vec<_>>();
 
         // Strip out leading stack frames for rust panic-handling.