Comments (8)
I think adding breakpoints and stepping through source code is as good as it can get right now. The rest depends on browser implementors and how quickly the debugging format is standardized, as seen here https://github.com/WebAssembly/debugging. I'm happy to investigate if something can be fixed on SwiftWasm side that browser do support already in a documented way, but I'm not sure if watching variable content is one of such features.
from swift.
As far as I know, DWARF support on Chrome is still in progress, and it only works with binaries built on the local machine because dwarf information has absolute path to source file.
At least, my debugger wasminspect works with Swift WebAssembly binary well.
So I think Swift compiler emits enough debug information through LLVM.
from swift.
Thank you! I wrote a document, but we need to improve that more.
As you say, wasminspect can't debug binaries using browser-specific features. In the long run, DWARF support in Chrome DevTool is an essential feature to popularize Swift on Web.
(I also planned to contribute to Chrome DevTools, but the project was too big, so I gave up at that time.)
from swift.
Hello,
I have tried as well to use Chrome DevTools for debugging Swift WebAssembly code
.
I have been able to read clearly Swift
files and classes, I can put breakpoints and I can go during debugging, step by step, however, I'm not able to watch variables content and so on.
Do we have any updates about how to use it?
Thanks.
from swift.
wasminspect is fantastic, and I much appreciate your work on that, we definitely should link to it as we improve user-visible documentation. I'm not sure though if it would work well if a user needs to debug issues with DOM, as far as I understand it doesn't provide a simulated browser DOM environment?
from swift.
They've posted an update, and looks like it's fully working with Emscripten 🤔
https://developers.google.com/web/updates/2020/12/webassembly
from swift.
I think adding breakpoints and stepping through source code is as good as it can get right now. The rest depends on browser implementors and how quickly the debugging format is standardized, as seen here https://github.com/WebAssembly/debugging. I'm happy to investigate if something can be fixed on SwiftWasm side that browser do support already in a documented way, but I'm not sure if watching variable content is one of such features.
Thanks for the quick reply, please keep us updated with your investigation.
from swift.
I did some investigation but unfortunately, it's difficult to support frame-variable inspection for now.
Generally, to support variable printing, a debugger needs to know the memory layout of the type of a variable, and DWARF supports primitive types (e.g. integer with endianness) and structural memory layout expression.
But Swift doesn’t use that mechanism and uses .swiftmodule's AST info in debugger to have more enriched formatting. Even for Int or String, we need AST info for printing because DWARF in a binary doesn’t have their layouts.
Therefore, in-browser debugging, we can see only C-oriented variables for now.
If Chrome DevTools would have Swift support, it would be delighted, but it’s an unrealistic story…
Perhaps, we may be able to interact with LLDB, which already has Swift supports, to get variable layout but I'm not sure it's feasible.
from swift.
Related Issues (20)
- Cannot import the main module of a executable in the test module HOT 3
- Seems async `Task` doesn't work HOT 6
- Add symbol renaming support to wasm-ld like `--alias` or `--defsym`
- Cannot run the DEVELOPMENT-SNAPSHOT-2023-04-25-a toolchain on macOS HOT 1
- Branch cut for 5.9 release HOT 3
- SwiftWASM REPL - allow import of WebAssembly.Memory
- Remove pthread hack HOT 1
- Roadmap: Threading Support
- Roadmap: Component Model Support HOT 2
- Unable to use newer Xcode than SwiftWasm toolchain's Swift version HOT 2
- Support WASILibc in SwiftPM's test runner HOT 2
- Overlay Swift resource directories upon wasi-sysroot
- SwiftDriver: Propagate `-use-static-resource-dir` for module merging job HOT 1
- SwiftWasm 5.9 release HOT 11
- Set up 5.10 release snapshot
- Remove mutex reference from icuuc HOT 1
- `undefined symbol: __stack_chk_guard` on Ubuntu 20.04 aarch64 HOT 2
- Compiler started crashing while building our XCTest HOT 2
- WASM files are quite large? HOT 2
- Cannot import Foundation on DEVELOPMENT channel HOT 12
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from swift.