The issue seems to come from firstcontinuehandler, I tweaked it a little 
and it is getting better

```
// It seems Windows searches ContinueHandler's list even
// if ExceptionHandler returns EXCEPTION_CONTINUE_EXECUTION.
// firstcontinuehandler will stop that search,
// if exceptionhandler did the same earlier.
//
// It is nosplit for the same reason as exceptionhandler.
//
//go:nosplit
func firstcontinuehandler(info *exceptionrecord, r *context, gp *g) int32 {
    print("Went in first Continue Handler")
if !isgoexception(info, r) {
        println("It is not go exception")
return _EXCEPTION_CONTINUE_SEARCH
}
    println("It is a go exception")
return _EXCEPTION_CONTINUE_EXECUTION
}
```

Seems go is not allowing "non Go exception" to be handled by Go code
Le samedi 18 janvier 2025 à 12:51:12 UTC+1, rudeus greyrat a écrit :

> Any idea please ? Been stuck at this for quite some time, seems that Go is 
> neglecting the return uintptr(handler.EXCEPTION_CONTINUE_SEARCH) and going 
> into panic mode ...
>
>
> Le vendredi 17 janvier 2025 à 16:30:24 UTC+1, rudeus greyrat a écrit :
>
>>
>> https://stackoverflow.com/questions/79365198/cannot-continue-after-entering-vectored-exception-handler-in-go
>>
>> asked the question here too if people want to have syntax highlight
>>
>> Le vendredi 17 janvier 2025 à 14:16:30 UTC+1, rudeus greyrat a écrit :
>>
>>> PS: I know there is defer recover mechanism in Go that can be used to 
>>> handle exception... But I would like to use AddVectoredExceptionHandler 
>>> (maybe it is already used behind the scene with defer recover ?) because I 
>>> can inspect the thread context in myhandler function
>>>
>>> Le vendredi 17 janvier 2025 à 13:17:07 UTC+1, rudeus greyrat a écrit :
>>>
>>>> I want to be able to catch windows exception and do stuff with it 
>>>> (mainly for hardware break point later).
>>>>
>>>> I created a custom function to add a Vectored Exception Handler using 
>>>> the windows API call AddVectoredExceptionHandler:
>>>> ```
>>>> func AddVEH(myHandler PVECTORED_EXCEPTION_HANDLER) error {
>>>>     kernel32 := syscall.NewLazyDLL("kernel32.dll")
>>>> addVectoredExceptionHandler := 
>>>> kernel32.NewProc("AddVectoredExceptionHandler")
>>>>
>>>>     
>>>> _, _, err := addVectoredExceptionHandler.Call(
>>>> uintptr(1),
>>>> syscall.NewCallback(func(exceptionInfo *EXCEPTION_POINTERS) uintptr {
>>>> return myHandler(exceptionInfo)
>>>> }),
>>>> )
>>>>     if err != nil {
>>>>         fmt.Println("Error Setting the VEH")
>>>>         fmt.Println(err.Error())
>>>>     }
>>>>     return err
>>>> }
>>>> ```
>>>>
>>>> I test it with a custom exception I raise:
>>>> ```
>>>> func myHandler(exceptionInfo *handler.EXCEPTION_POINTERS) uintptr {
>>>> println("Exception occurred! ---> Code")
>>>> println(exceptionInfo.ExceptionRecord.ExceptionCode)
>>>> println("It happends in life, lets continue")
>>>> return ^uintptr(0) // EXCEPTION_CONTINUE_EXECUTION = -1
>>>> }
>>>>
>>>> func main() {
>>>> handler.AddVEH(myHandler)
>>>>
>>>> raiseCustomException() // Just Raises a custom EXCEPTION with 
>>>> RaiseException winapi and code 0xE0000001
>>>>
>>>> println("Continued")
>>>> }
>>>> ```
>>>>
>>>> As I return with EXCEPTION_CONTINUE_EXECUTION, I expect that 
>>>> `println("Continued")` will be executed. However, it is not the case at 
>>>> all:
>>>> ```
>>>> Error Setting the VEH
>>>>     The operation completed successfully.
>>>> Exception occurred! ---> Code
>>>> 3758096385
>>>> It happends in life, lets continue
>>>> Exception 0xe0000001 0x7eb71d5fb17c 0x1b 0x7ffc54e4b699
>>>> PC=0x7ffc54e4b699
>>>>
>>>> runtime.cgocall(0xf1dde0, 0xc000049b30)
>>>>         runtime/cgocall.go:167 +0x3e fp=0xc00006fe28 sp=0xc00006fdc0 
>>>> pc=0xf10a7e
>>>> syscall.SyscallN(0xc00001e410?, {0xc0000121c0?, 0x0?, 0xf39a00?})
>>>> ```
>>>>
>>>> As you see the program enter the handler function but never continues, 
>>>> rather it exit and print the stack trace... 
>>>>
>>>> Not sure if it is because of syscall.NewCallback or something else ...
>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/59818114-e21a-4b34-9f48-f6ff6e257c0fn%40googlegroups.com.

Reply via email to