gpt4 book ai didi

go - 使用 golang 时无法从 cgo 例程中获取带有核心文件的堆栈跟踪

转载 作者:IT王子 更新时间:2023-10-29 02:15:02 24 4
gpt4 key购买 nike

我正在使用 Golang 和 cgo。当我的 C 代码引发 assert() 时,我无法在使用 cgo 时看到 C 代码的堆栈跟踪。

相反,我看到了捕获断言的 golang 运行时的堆栈跟踪。

这是我的 C 代码示例

#include <stdio.h>
#include <pthread.h>
#include <assert.h>
#include <string.h>

void fn2(char *arg)
{
int stackvar2 = 256;

printf("Argument %s\n", arg);

assert(1 == 2);
}

void fn1(int arg)
{
int stackvar3 = 512;
char var[256];

strcpy(var, "deadbeef");

fn2(var);
}


void *thread(void *arg)
{
printf("Hello from the thread... going in for an assert\n");

fn1(1092);

return NULL;
}

void hello_world(char *str)
{
pthread_t tid;

printf("Hello World from C and here the str is from Go: %s\n", str);

pthread_create(&tid, NULL, thread, NULL);

sleep(100000);
}


Here is my Go code



package main

/*
extern void hello_world(char *str);
#cgo LDFLAGS: -L. -lhello
#cgo CFLAGS: -g3
*/
import "C"

import (
_ "fmt"
)

func main() {
str := "From Golang"

cStr := C.CString(str)
C.hello_world(cStr)

select {}
}

这是我的 Makefile

all:
gcc -g3 -O0 -c hello.c
ar cru libhello.a hello.o
go build hello.go

clean:
rm -f *.o hello

最佳答案

除了 ulimit -c 的明显检查外,使用 GOTRACEBACK=crash 运行 go 程序。这将打印出更多信息,并允许程序以 SIGABRT 退出以触发核心转储。

关于go - 使用 golang 时无法从 cgo 例程中获取带有核心文件的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com