Skip to content

Commit 8b0c6ea

Browse files
authored
Merge pull request #1181 from visualfc/trace
debug: fix print stack for wasm
2 parents f0728c4 + 013f2ef commit 8b0c6ea

File tree

4 files changed

+52
-7
lines changed

4 files changed

+52
-7
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#ifdef __EMSCRIPTEN__
2+
//emscripten
3+
#include <emscripten.h>
4+
5+
void llgo_print_stack(int skip) {
6+
EM_ASM({
7+
function getStackTrace() {
8+
var stack;
9+
try {
10+
throw new Error();
11+
} catch (e) {
12+
stack = e.stack;
13+
}
14+
return stack;
15+
}
16+
17+
var stack = getStackTrace();
18+
if (stack) {
19+
var frames = stack.split('\n').slice($0);
20+
frames.forEach(function(frame) {
21+
console.log(frame.trim());
22+
});
23+
}
24+
}, skip);
25+
}
26+
#else
27+
// wasi
28+
void llgo_print_stack(int skip){
29+
30+
}
31+
#endif

runtime/internal/clite/debug/debug.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,12 @@ func StackTrace(skip int, fn func(fr *Frame) bool) {
4444
return 1
4545
})
4646
}
47+
48+
func PrintStack(skip int) {
49+
StackTrace(skip+1, func(fr *Frame) bool {
50+
var info Info
51+
Addrinfo(unsafe.Pointer(fr.PC), &info)
52+
c.Fprintf(c.Stderr, c.Str("[0x%08X %s+0x%x, SP = 0x%x]\n"), fr.PC, fr.Name, fr.Offset, fr.SP)
53+
return true
54+
})
55+
}

runtime/internal/clite/debug/debug_wasm.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import (
66
c "github.com/goplus/llgo/runtime/internal/clite"
77
)
88

9+
const (
10+
LLGoFiles = "_wrap/debug_wasm.c"
11+
)
12+
913
type Info struct {
1014
Fname *c.Char
1115
Fbase c.Pointer
@@ -31,3 +35,10 @@ type Frame struct {
3135
func StackTrace(skip int, fn func(fr *Frame) bool) {
3236
panic("not implemented")
3337
}
38+
39+
func PrintStack(skip int) {
40+
print_stack(c.Int(skip + 4))
41+
}
42+
43+
//go:linkname print_stack C.llgo_print_stack
44+
func print_stack(skip c.Int)

runtime/internal/runtime/z_rt.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,7 @@ func Rethrow(link *Defer) {
6262
if ptr := excepKey.Get(); ptr != nil {
6363
if link == nil {
6464
TracePanic(*(*any)(ptr))
65-
debug.StackTrace(0, func(fr *debug.Frame) bool {
66-
var info debug.Info
67-
debug.Addrinfo(unsafe.Pointer(fr.PC), &info)
68-
c.Fprintf(c.Stderr, c.Str("[0x%08X %s+0x%x, SP = 0x%x]\n"), fr.PC, fr.Name, fr.Offset, fr.SP)
69-
return true
70-
})
71-
65+
debug.PrintStack(2)
7266
c.Free(ptr)
7367
c.Exit(2)
7468
} else {

0 commit comments

Comments
 (0)