如何使用 SystemC 修复 Xcode 中的永久性 EXC_BAD_ACCESS 异常?
How to fix permanent EXC_BAD_ACCESS exception in Xcode using SystemC?
我想使用 Xcode IDE 编写 SystemC 代码。我已经全部设置好,我用来测试我的安装的代码构建得很好,但它总是运行到线程 1:EXC_BAD_ACCESS 异常,无论我做什么。
我试图注释掉所有内容,直到只剩下 systemc header 和 sc_main。当我在另一个项目中尝试正常的 c++ 代码时,看看它是否是一个一般的 Xcode 问题,它工作正常并且 运行 也不例外。
我使用这个通用的 Hello World-code 来测试我的安装:
#include <systemc>
//Hello_world is module name
SC_MODULE (hello_world) {
SC_CTOR (hello_world) {
// Nothing in constructor
}
void say_hello() {
//Print "Hello World" to the console.
std::cout << "Hello World.\n";
}
};
// sc_main in top level function like in C++ main
int sc_main(int argc, char* argv[]) {
hello_world hello("HELLO");
//Print the hello world
hello.say_hello();
return(0);
}
在代码 运行 几秒钟后,它总是崩溃:线程 1:EXC_BAD_ACCESS(代码=2,地址=0x7ffeef3ffff8)。
编辑:
我的配置:
- SystemC:v2.3.3
- Xcode:v10.2.1 (10E1001)
- 编译器:(我运行 gcc --version
)
-LLV:v10.0.1 (clang-1001.0.46.4)
- C++:v4.2.1
我使用 std=gnu++98(编译器默认值)作为 c++ 语言方言,其他所有内容 运行 都会出现构建错误。
EXC_BAD_ACCESS
当系统无法从执行块中 return 时发生,例如无限循环或递归。
您应该查看 调试器导航器 中的堆栈跟踪,看看正在调用哪个函数,而不是 returns OR 哪些函数被一遍又一遍地调用。
不要忘记在 DEBUG 模式下 运行 项目。 (未发布)
如果您使用的是 SystemC 2.3.2,您可能 运行 遇到以下问题(在 macOS 10.13 或更高版本上):http://forums.accellera.org/topic/6079-make-check-return-fail/。此问题假定已在 SystemC 2.3.3 中修复。
您可以通过使用 ../configure --disable-async-updates ...
编译 SystemC 2.3.2 或移动到 SystemC 2.3.3 并 启用 C++11(可能是默认设置)来避免它在最近的 Xcode 版本中,您可以检查模型中 SC_CPLUSPLUS
宏的值。
我做到了!我按照此答案中提供的步骤使用 Cmake 构建了 SystemC:
.
在 CMakeLists.txt
中,我将 CMAKE_CXX_STANDARD
显式设置为 11
并通过命令行和 cmake
构建项目。
感谢您的帮助:)
我想使用 Xcode IDE 编写 SystemC 代码。我已经全部设置好,我用来测试我的安装的代码构建得很好,但它总是运行到线程 1:EXC_BAD_ACCESS 异常,无论我做什么。
我试图注释掉所有内容,直到只剩下 systemc header 和 sc_main。当我在另一个项目中尝试正常的 c++ 代码时,看看它是否是一个一般的 Xcode 问题,它工作正常并且 运行 也不例外。
我使用这个通用的 Hello World-code 来测试我的安装:
#include <systemc>
//Hello_world is module name
SC_MODULE (hello_world) {
SC_CTOR (hello_world) {
// Nothing in constructor
}
void say_hello() {
//Print "Hello World" to the console.
std::cout << "Hello World.\n";
}
};
// sc_main in top level function like in C++ main
int sc_main(int argc, char* argv[]) {
hello_world hello("HELLO");
//Print the hello world
hello.say_hello();
return(0);
}
在代码 运行 几秒钟后,它总是崩溃:线程 1:EXC_BAD_ACCESS(代码=2,地址=0x7ffeef3ffff8)。
编辑:
我的配置:
- SystemC:v2.3.3
- Xcode:v10.2.1 (10E1001)
- 编译器:(我运行 gcc --version
)
-LLV:v10.0.1 (clang-1001.0.46.4)
- C++:v4.2.1
我使用 std=gnu++98(编译器默认值)作为 c++ 语言方言,其他所有内容 运行 都会出现构建错误。
EXC_BAD_ACCESS
当系统无法从执行块中 return 时发生,例如无限循环或递归。
您应该查看 调试器导航器 中的堆栈跟踪,看看正在调用哪个函数,而不是 returns OR 哪些函数被一遍又一遍地调用。
不要忘记在 DEBUG 模式下 运行 项目。 (未发布)
如果您使用的是 SystemC 2.3.2,您可能 运行 遇到以下问题(在 macOS 10.13 或更高版本上):http://forums.accellera.org/topic/6079-make-check-return-fail/。此问题假定已在 SystemC 2.3.3 中修复。
您可以通过使用 ../configure --disable-async-updates ...
编译 SystemC 2.3.2 或移动到 SystemC 2.3.3 并 启用 C++11(可能是默认设置)来避免它在最近的 Xcode 版本中,您可以检查模型中 SC_CPLUSPLUS
宏的值。
我做到了!我按照此答案中提供的步骤使用 Cmake 构建了 SystemC:
在 CMakeLists.txt
中,我将 CMAKE_CXX_STANDARD
显式设置为 11
并通过命令行和 cmake
构建项目。
感谢您的帮助:)