gpt4 book ai didi

c++ - 异常未在辅助线程中捕获,从而导致段错误

转载 作者:行者123 更新时间:2023-12-02 10:38:05 26 4
gpt4 key购买 nike

我交叉编译了一个基于MIPS的平台。
以下代码导致段错误,回溯导致__cxa_throw:

#include <cstdio>
#include <exception>
#include <thread>

#include <execinfo.h>
#include <signal.h>
#include <unistd.h>

void handler(int sig) {
fprintf(stderr, "Error: signal %d:\n", sig);
void *array[10];
size_t size;

// get void*'s for all entries on the stack
size = backtrace(array, 10);

fprintf(stderr, "Error: signal %d:\n", sig);
// print out all the frames to stderr
backtrace_symbols_fd(array, size, STDERR_FILENO);
exit(1);
}

void deco()
{
puts("Secondary thread started");
for (int i = 0; i < 100; ++i)
{
try {
puts("throwing");
throw std::runtime_error("test exception");
}
catch (std::exception & e)
{
puts("catched");
puts(e.what());
}
puts("going on");
}
puts("Secondary thread ending");
}


int main()
{
signal(SIGSEGV, handler);
std::thread t2(deco);
t2.join();
return 0;
}

我的makefile:
all: build

build:
/opt/mips/bin/mips-linux-gnu-g++ \
-std=c++11 -O3 -mips32r2 -mtune=xburst -mmxu2 -mhard-float -mel -static -pthread -g -rdynamic \
-Wl,--no-export-dynamic -Wl,--exclude-libs,ALL -Wl,--gc-sections -Wl,--as-needed \
cv_test.cpp -o j_test \
-lm -latomic -lrt
cp ./j_test /srv/tftp/j_test

clean:
rm -rf *.o j_test

编译器是一些ingenic自定义构建:mips-linux-gnu-g++(Ingenic r3.2.1-gcc520 2017.12-15)5.2.0

如果deco()在主线程而不是辅助线程中运行,则不会发生崩溃。有什么线索吗?可能是众所周知的gcc标准库问题?有解决方法吗?

最佳答案

静态链接有问题。

将行添加到LDFLAGS:

-Wl,--whole-archive -lpthread -lc -Wl,--no-whole-archive

即使可执行文件的大小变大了,也为我解决了这个问题。

关于c++ - 异常未在辅助线程中捕获,从而导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59322545/

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