Hi Tamas,

Using RPC will not scale and it needs lot of effort. So our only choice is 
CGO.

Best Regards
Mariappan
On Monday, January 9, 2023 at 5:04:19 PM UTC+5:30 Tamás Gulácsi wrote:

> I'd create a separate C program, that can be communicated with RPC style - 
> (https://github.com/protobuf-c/protobuf-c-rpc may solve it easily),
> and have the Go program start it like 
> https://github.com/hashicorp/go-plugin .
>
> That way the stack traces and core dumps are separate, each program is 
> easier to debug,
> the C error does not take down the Go program, which can restart the 
> plugin ...
>
> mariappa...@gmail.com a következőt írta (2023. január 9., hétfő, 10:20:28 
> UTC+1):
>
>> Hi Ian,
>>
>> Thanks. I will try this. When a process is crashed because of a 
>> SEGMENTATION fault, it can be debugged by identifying the stack trace from 
>> the core dump. Is there any other technique to debug this issue? Can you 
>> please help if any other technique is there?
>>
>> Best Regards
>> Mariappan
>>
>> On Mon, Jan 9, 2023 at 12:07 PM Ian Lance Taylor <ia...@golang.org> 
>> wrote:
>>
>>> On Sun, Jan 8, 2023, 9:33 PM mariappan balraj <mariappa...@gmail.com> 
>>> wrote:
>>>
>>>> Hi Ian,
>>>>
>>>> Thanks for all your replies. It really shows that you have tried to 
>>>> give your best all the time. I need some direction to get a permanent 
>>>> solution for this. Is it possible to get help from the core google GO 
>>>> team? 
>>>> How to escalate this issue and get the fix? Please give me directions. So 
>>>> that I can try best from my side.
>>>>
>>>
>>> I'm on the core Google Go team myself.
>>>
>>> The next step is to file a bug report at https://go.dev/issue, with 
>>> exact details for how to reproduce the problem.  But I don't want to 
>>> mislead you: it's unlikely that anybody on the core Go team is going to fix 
>>> this.  That said, Go is an open source project, and filing a bug report is 
>>> the right step to encourage someone to fix the problem.
>>>
>>> It's also worth taking a step back and describing the real problem.  
>>> Using gdb to get a stack trace from a core dump is a technique, it's not a 
>>> solution.  Perhaps there are other techniques.
>>>
>>> Ian
>>>
>>>
>>>
>>>> On Sat, Jan 7, 2023 at 10:29 PM Ian Lance Taylor <ia...@golang.org> 
>>>> wrote:
>>>>
>>>>> On Fri, Jan 6, 2023 at 9:01 PM mariappan balraj
>>>>> <mariappa...@gmail.com> wrote:
>>>>> >
>>>>> > Thanks for your continuous support. GOLANG supports CGO to invoke C 
>>>>> functions. When it is supported, the important thing is, it should 
>>>>> provide 
>>>>> better debugging support when there is any issue. In customer sites, it 
>>>>> is 
>>>>> not possible to run applications with GDB. Customers only provide core 
>>>>> dump 
>>>>> and logs. With the provided information, we should be able to debug the 
>>>>> issue. It may not be possible to reproduce all the issues in the 
>>>>> development environment to debug the issue.
>>>>> >
>>>>> > When we run the application with GDB, we are getting stack trace. 
>>>>> Then the same thing should be possible with core dump also.
>>>>> >
>>>>> > I have tried with CGO symbolizer from 
>>>>> https://github.com/ianlancetaylor/cgosymbolizer. I am getting the 
>>>>> following output. This is useful. But I want to dump the C variables 
>>>>> (local 
>>>>> and global) to debug the issue. This is very critical when we want to 
>>>>> debug 
>>>>> some issues.
>>>>> >
>>>>> > What should I do now? How to proceed further? If possible, please 
>>>>> provide your help with this.
>>>>>
>>>>> I'm sorry, I don't have any useful suggestions.  It's possible in
>>>>> principle to unwind the stack yourself by looking carefully at the
>>>>> instructions that will be executed and the PC and SP registers, and
>>>>> then to look at the instructions to figure out where variables are
>>>>> stored, but it's hard and it's easy to make a mistake.
>>>>>
>>>>> Ian
>>>>>
>>>>>
>>>>> > fatal error: unexpected signal during runtime execution
>>>>> > [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 
>>>>> pc=0x463926]
>>>>> >
>>>>> > runtime stack:
>>>>> > runtime.throw({0x49046b?, 0x0?})
>>>>> > /usr/local/go/src/runtime/panic.go:1047 +0x5d fp=0x7ffca8644230 
>>>>> sp=0x7ffca8644200 pc=0x43243d
>>>>> > runtime.sigpanic()
>>>>> > /usr/local/go/src/runtime/signal_unix.go:819 +0x369 
>>>>> fp=0x7ffca8644280 sp=0x7ffca8644230 pc=0x446569
>>>>> >
>>>>> > goroutine 1 [syscall]:
>>>>> > test1
>>>>> > /home/ubuntu/mbalraj/GO/TEST/test.go:9 pc=0x463926
>>>>> > test2
>>>>> > /home/ubuntu/mbalraj/GO/TEST/test.go:14 pc=0x46393b
>>>>> > test3
>>>>> > /home/ubuntu/mbalraj/GO/TEST/test.go:18 pc=0x46394b
>>>>> > _cgo_64d258852278_Cfunc_test3
>>>>> > /tmp/go-build/cgo-gcc-prolog:49 pc=0x46396b
>>>>> > runtime.asmcgocall
>>>>> > /usr/local/go/src/runtime/asm_amd64.s:844 pc=0x45c443
>>>>> > runtime.cgocall(0x46394f, 0xc000058f70)
>>>>> > /usr/local/go/src/runtime/cgocall.go:158 +0x5c fp=0xc000058f48 
>>>>> sp=0xc000058f10 pc=0x40579c
>>>>> > main._Cfunc_test3()
>>>>> > _cgo_gotypes.go:41 +0x45 fp=0xc000058f70 sp=0xc000058f48 pc=0x463885
>>>>> > main.main()
>>>>> > /home/ubuntu/mbalraj/GO/TEST/test.go:26 +0x17 fp=0xc000058f80 
>>>>> sp=0xc000058f70 pc=0x4638b7
>>>>> > runtime.main()
>>>>> > /usr/local/go/src/runtime/proc.go:250 +0x212 fp=0xc000058fe0 
>>>>> sp=0xc000058f80 pc=0x434c92
>>>>> > runtime.goexit()
>>>>> > /usr/local/go/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000058fe8 
>>>>> sp=0xc000058fe0 pc=0x45c761
>>>>> >
>>>>> > Best Regards
>>>>> > Mariappan
>>>>> >
>>>>> > On Sat, Jan 7, 2023 at 9:45 AM Ian Lance Taylor <ia...@golang.org> 
>>>>> wrote:
>>>>> >>
>>>>> >> On Fri, Jan 6, 2023, 5:57 PM mariappan balraj <
>>>>> mariappa...@gmail.com> wrote:
>>>>> >>>
>>>>> >>> Hi Ian,
>>>>> >>> Thanks for your active help. When I run the program by using gdb, 
>>>>> I am getting the complete stack. No issue. The issue is there when we 
>>>>> debug 
>>>>> core dump. Could you kindly please check whether you are seeing the same 
>>>>> behavior with core dump?
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> Oh, right, sorry, I forgot about the core dump part.  I don't know 
>>>>> if there is a way to make that better, given the three different stacks 
>>>>> involved.  I'm surprised that it works as well as it does.  A pure C 
>>>>> program that doesn't use sigaltstack only has a single stack, so it's a 
>>>>> much simpler case.
>>>>> >>
>>>>> >> Ian
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >>> On Sat, 7 Jan, 2023, 7:03 am Ian Lance Taylor, <ia...@golang.org> 
>>>>> wrote:
>>>>> >>>>
>>>>> >>>> On Fri, Jan 6, 2023 at 5:28 PM mariappan balraj
>>>>> >>>> <mariappa...@gmail.com> wrote:
>>>>> >>>> >
>>>>> >>>> > I am not expecting GO stack. I am interested only in getting C 
>>>>> stack. If I want go stack, I can use delve debugger to get it. From GO, 
>>>>> using CGO, test3() is called which is calling test2() which is calling 
>>>>> test1(). I am expecting only C stack which contains test3(),  test2(), 
>>>>> test1(). In this particular case assigning value by using pointer 
>>>>> variable 
>>>>> which contains NULL(segmentation fault). I am seeing only test1(). After 
>>>>> that it is not stack and saying stack corruption. I strongly believe that 
>>>>> you can help on this. Please help.
>>>>> >>>>
>>>>> >>>> I put your program in foo.go.  Then I did:
>>>>> >>>>
>>>>> >>>> > CGO_CFLAGS=-g go build foo.go
>>>>> >>>> > gdb ./foo
>>>>> >>>> GNU gdb (Debian 12.1-3) 12.1
>>>>> >>>> Copyright (C) 2022 Free Software Foundation, Inc.
>>>>> >>>> License GPLv3+: GNU GPL version 3 or later <
>>>>> http://gnu.org/licenses/gpl.html>
>>>>> >>>> This is free software: you are free to change and redistribute it.
>>>>> >>>> There is NO WARRANTY, to the extent permitted by law.
>>>>> >>>> Type "show copying" and "show warranty" for details.
>>>>> >>>> This GDB was configured as "x86_64-linux-gnu".
>>>>> >>>> Type "show configuration" for configuration details.
>>>>> >>>> For bug reporting instructions, please see:
>>>>> >>>> <https://www.gnu.org/software/gdb/bugs/>.
>>>>> >>>> Find the GDB manual and other documentation resources online at:
>>>>> >>>>     <http://www.gnu.org/software/gdb/documentation/>.
>>>>> >>>>
>>>>> >>>> For help, type "help".
>>>>> >>>> Type "apropos word" to search for commands related to "word"...
>>>>> >>>> Reading symbols from ./foo...
>>>>> >>>> warning: File "/home/iant/go/src/runtime/runtime-gdb.py" 
>>>>> auto-loading
>>>>> >>>> has been declined by your `auto-load safe-path' set to
>>>>> >>>> "$debugdir:$datadir/auto-load".
>>>>> >>>> To enable execution of this file add
>>>>> >>>> add-auto-load-safe-path /home/iant/go/src/runtime/runtime-gdb.py
>>>>> >>>> line to your configuration file "/home/iant/.config/gdb/gdbinit".
>>>>> >>>> To completely disable this security protection add
>>>>> >>>> set auto-load safe-path /
>>>>> >>>> line to your configuration file "/home/iant/.config/gdb/gdbinit".
>>>>> >>>> For more information about this security protection see the
>>>>> >>>> --Type <RET> for more, q to quit, c to continue without paging--
>>>>> >>>> "Auto-loading safe path" section in the GDB manual.  E.g., run 
>>>>> from the shell:
>>>>> >>>> info "(gdb)Auto-loading safe path"
>>>>> >>>> (gdb) r
>>>>> >>>> Starting program: /tmp/x/foo
>>>>> >>>> [Thread debugging using libthread_db enabled]
>>>>> >>>> Using host libthread_db library 
>>>>> "/lib/x86_64-linux-gnu/libthread_db.so.1".
>>>>> >>>> [New Thread 0x7fffd09ea640 (LWP 650585)]
>>>>> >>>> [New Thread 0x7fffcbfff640 (LWP 650586)]
>>>>> >>>> [New Thread 0x7fffcb7fe640 (LWP 650587)]
>>>>> >>>> [New Thread 0x7fffcaffd640 (LWP 650588)]
>>>>> >>>> [New Thread 0x7fffca7fc640 (LWP 650589)]
>>>>> >>>>
>>>>> >>>> Thread 1 "foo" received signal SIGSEGV, Segmentation fault.
>>>>> >>>> 0x000000000045b01a in test1 () at /home/iant/foo.go:6
>>>>> >>>> 6    *p = 30;
>>>>> >>>> (gdb) where
>>>>> >>>> #0  0x000000000045b01a in test1 () at /home/iant/foo.go:6
>>>>> >>>> #1  0x000000000045b02c in test2 () at /home/iant/foo.go:10
>>>>> >>>> #2  0x000000000045b038 in test3 () at /home/iant/foo.go:14
>>>>> >>>> #3  0x000000000045b054 in _cgo_3060c004c901_Cfunc_test3 
>>>>> (v=0xc000064f70)
>>>>> >>>>     at /tmp/go-build/cgo-gcc-prolog:49
>>>>> >>>> #4  0x0000000000456c64 in runtime.asmcgocall ()
>>>>> >>>>     at /home/iant/go/src/runtime/asm_amd64.s:848
>>>>> >>>> #5  0x00000000004e3460 in ?? ()
>>>>> >>>> #6  0x0000000000000001 in ?? ()
>>>>> >>>> #7  0x000000c000080500 in ?? ()
>>>>> >>>> #8  0x00007fffffffe458 in ?? ()
>>>>> >>>> #9  0x0000000000439225 in runtime.malg.func1 ()
>>>>> >>>>     at /home/iant/go/src/runtime/proc.go:4227
>>>>> >>>> #10 0x0000000000456aa9 in runtime.systemstack ()
>>>>> >>>>     at /home/iant/go/src/runtime/asm_amd64.s:496
>>>>> >>>> #11 0x00000000004596a5 in runtime.newproc (fn=0x1) at 
>>>>> <autogenerated>:1
>>>>> >>>> #12 0x00000000004cc720 in runtime[scavenger] ()
>>>>> >>>> #13 0x0000000000000001 in ?? ()
>>>>> >>>> #14 0x00000000004569a5 in runtime.mstart ()
>>>>> >>>>     at /home/iant/go/src/runtime/asm_amd64.s:394
>>>>> >>>> #15 0x000000000045692f in runtime.rt0_go ()
>>>>> >>>>     at /home/iant/go/src/runtime/asm_amd64.s:358
>>>>> >>>> #16 0x0000000000000001 in ?? ()
>>>>> >>>> --Type <RET> for more, q to quit, c to continue without paging--q
>>>>> >>>> Quit
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> So when I try it, I do see the full C stack at the point where the
>>>>> >>>> signal occurs.
>>>>> >>>>
>>>>> >>>> In your backtrace earlier you are trying to see the stack after 
>>>>> the
>>>>> >>>> signal is already being handled by the Go signal handler.  I don't
>>>>> >>>> know why that would work.
>>>>> >>>>
>>>>> >>>> Ian
>>>>>
>>>>

-- 
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 on the web visit 
https://groups.google.com/d/msgid/golang-nuts/60ef3181-f1e4-48d0-9fc9-f5b7bc6f4272n%40googlegroups.com.

Reply via email to