Skip to content

Catching C stacktraces from a Go parent process

Notifications You must be signed in to change notification settings

keyan/cgo_segfault

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

cgo_segfault

Example code demonstrating setup of a global constructor to install a signal handler to catch signals occuring within cgo called C/C++ functions.

Background

Recently I ran into an issue where I was calling into a C++ function, accessing invalid memory, and causing a segmentation fault which results in the operating system issuing a SIGSEGV signal to the parent Go process, which then crashes. Unfortunately, the Go signal handler doesn't know how to unwind the C stack and generate a panic so instead it just outputs something like:

go fatal error: unexpected signal during runtime execution

This code installs a signal handler in C before the Go process starts, intentionally casuses a segmentation fault, handles the resulting OS signal, and exits. It doesn't properly dump a backtrace, for reasons which are explained in more detail here: https://keyanp.com/cgo-segfault.html

About

Catching C stacktraces from a Go parent process

Resources

Stars

Watchers

Forks