@@ -36,6 +36,7 @@ import "C"
3636
3737import (
3838 "fmt"
39+ "runtime"
3940 "runtime/cgo"
4041 "sync"
4142 "unsafe"
@@ -107,6 +108,10 @@ var _ InstanceDataProvider = &NapiGoInstanceData{}
107108var _ CallbackDataProvider = & NapiGoInstanceCallbackData {}
108109var _ AsyncWorkDataProvider = & NapiGoInstanceAsyncWorkData {}
109110
111+ const (
112+ maxStackTraceSize = 8192
113+ )
114+
110115func InitializeInstanceData (env Env ) Status {
111116 return setInstanceData (env , & NapiGoInstanceData {})
112117}
@@ -130,6 +135,7 @@ func DeleteCallbackData(
130135 err := recover ()
131136 if err != nil {
132137 fmt .Printf ("napi.DeleteCallbackData: Recovered from panic: %s\n " , err )
138+ reportStackTrace ()
133139
134140 msg := "unknown error"
135141 if err , ok := err .(error ); ok {
@@ -158,6 +164,7 @@ func ExecuteCallback(
158164 err := recover ()
159165 if err != nil {
160166 fmt .Printf ("napi.ExecuteCallback: Recovered from panic: %s\n " , err )
167+ reportStackTrace ()
161168
162169 msg := "unknown error"
163170 if err , ok := err .(error ); ok {
@@ -205,6 +212,7 @@ func ExecuteAsyncExecuteCallback(cEnv C.napi_env, cData unsafe.Pointer) {
205212 "napi.ExecuteAsyncExecuteCallback: Recovered from panic: %s\n " ,
206213 err ,
207214 )
215+ reportStackTrace ()
208216
209217 msg := "unknown error"
210218 if err , ok := err .(error ); ok {
@@ -238,6 +246,7 @@ func ExecuteAsyncCompleteCallback(
238246 "napi.ExecuteAsyncExecuteCallback: Recovered from panic: %s\n " ,
239247 err ,
240248 )
249+ reportStackTrace ()
241250
242251 msg := "unknown error"
243252 if err , ok := err .(error ); ok {
@@ -301,6 +310,12 @@ func setInstanceData(env Env, data *NapiGoInstanceData) Status {
301310 ))
302311}
303312
313+ func reportStackTrace () {
314+ stackTraceBuf := make ([]byte , maxStackTraceSize )
315+ stackTraceSz := runtime .Stack (stackTraceBuf , false )
316+ fmt .Printf ("%s\n " , string (stackTraceBuf [:stackTraceSz ]))
317+ }
318+
304319func (d * NapiGoInstanceData ) GetUserData () any {
305320 return d .UserData
306321}
0 commit comments