Open dcharkes opened 6 months ago
@helin24 suggested we could possibly start two debuggers on the same process.
As a first step, this should be possible with vscode for example by starting the debugger for one language (for example c/c++) and attaching in the other (Dart).
A second step could be wrapping such logic in a plugin so that you send requests about what variable are in frame to both debugging sessions and then combining the info before sending it back to IDE.
Now that Dart has interoperability with C through
dart:ffi
, C++/Rust/Go (when using extern C), Objective-C through FFIgen, Java/Kotlin through JNIgen, we should see if we can improve the debugging experience.Current situation
Basically, there are currently two approaches that are combined in a debugging session: 1) Run the Dart debugger, and have no access to C/C++/Rust/Java/Kotlin/Objective-C/Swift. 2) Run the native debugger (in xcode, Android studio, vscode with c++ plugin) and have no access to Dart variables and Dart breakpoints.
A typical debug session looks like the following:
Goal user experience
The north star goal would be to have a debugging experience in which:
Details
We need to investigate what technical approach to take here. Does something such as a multi-language debug info or debugging protocol already exist? (We have considered in the past to make Dart output the dwarf debuginfo so that C/C++ debuggers can understand dwarf. But typical C/C++ debuggers don't deal well with a JIT compiled language, so it would only help for AOT. And going that direction would only help for C/C++/Obj-C/Rust/Go + Dart debugging, not for JVM based languages.)
Filing this as an umbrella issue. Happy for people to post feature requests or suggestions on how to tackle this problem. We will likely split this issue out in smaller tasks later.
Some related issues: