Как исправить постоянное исключение EXC_BAD_ACCESS в Xcode с помощью SystemC?

Я хочу написать код SystemC с помощью Xcode IDE. Я все это настроил, и код, который я использую для тестирования моих установочных сборок, работает нормально, но он всегда работает с исключением Thread 1: EXC_BAD_ACCESS, независимо от того, что я делаю.

Я пытался все закомментировать, пока не остался только заголовок systemc и sc_main. Когда я попробовал обычный код С++ в другом проекте, чтобы увидеть, была ли это общая проблема Xcode, он работал нормально и не сталкивался с исключениями.

Я использую этот общий код Hello World для тестирования моей установки:

#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).

EDIT: Моя конфигурация:
- 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++, все остальное работает в ошибки сборки.


person Constikri    schedule 16.06.2019    source источник
comment
Какую версию SystemC/Xcode/компилятора вы используете? Удалось ли проверить gmake при сборке SystemC?   -  person pah    schedule 17.06.2019
comment
Я не проверял gmake/make свою сборку, но она отлично собралась без ошибок.   -  person Constikri    schedule 17.06.2019
comment
Если вы использовали Cmake, обязательно установите CMAKE_CXX_STANDARD по крайней мере до 11 с SystemC 2.3.3, чтобы избежать проблемы, упомянутой в моем ответе.   -  person pah    schedule 18.06.2019
comment
И можете ли вы попробовать собрать SystemC и вашу модель с CXX=clang++ и CC=clang ?   -  person pah    schedule 18.06.2019


Ответы (3)


EXC_BAD_ACCESS происходит, когда система не может вернуться из блока выполнения, такого как бесконечный цикл или рекурсия.

вам следует взглянуть на трассировку стека в навигаторе отладчика и посмотреть, какая функция вызывается и никогда не возвращает результат, ИЛИ какие функции вызываются снова и снова.

Не забудьте запустить проект в режиме DEBUG. (НЕ выпускать)

person Mojtaba Hosseini    schedule 16.06.2019
comment
В потоке 1 появляются два процесса (?): 0 malloc_zone_malloc и 126813 _dyld_start, исключение появляется в обоих из них. В 0 он находится в строке 33 -> 0x7fff69f7adf9 ‹+99›: callq *0x18(%r14), а в 126813 — в строке 15 -> 0x10000e036 ‹+54›: movq -0x8(%rbp), %rdi. Это единственная трассировка стека, которую я получаю, и они никак не помогают. Надеюсь, ты знаешь, что с этим делать. - person Constikri; 16.06.2019
comment
Это адреса памяти, и они будут меняться каждый раз, когда вы запускаете свой проект. Было бы лучше, если бы вы загрузили свой образец проекта на git, чтобы все могли ознакомиться с ним поближе. - person Mojtaba Hosseini; 16.06.2019
comment
Дело в том, что код Hello World, который я разместил в своем вопросе, ЯВЛЯЕТСЯ моим образцом Projekt. Это буквально весь код, который я использую, библиотека SystemC. - person Constikri; 17.06.2019

Если вы используете SystemC 2.3.2, вы можете столкнуться со следующей проблемой (в macOS 10.13 или более поздней версии): http://forums.accellera.org/topic/6079-make-check-return-fail/. Предполагается, что эта проблема исправлена ​​в SystemC 2.3.3.

Вы можете избежать этого, скомпилировав SystemC 2.3.2 с ../configure --disable-async-updates ... или перейдя на SystemC 2.3.3 и включив C++11 (может быть по умолчанию в последней версии Xcode, вы можете проверить значение макрос SC_CPLUSPLUS в вашей модели).

person pah    schedule 17.06.2019

Я это сделал! Я построил SystemC с помощью Cmake, выполнив шаги, описанные в этом ответе: sc-core">Настройка проекта SystemC с помощью CMake: неопределенная ссылка на sc_core .
В CMakeLists.txt я явно установил CMAKE_CXX_STANDARD на 11 и построил проект с помощью командной строки и cmake.
Спасибо за помощь :)

person Constikri    schedule 18.06.2019
comment
Так что мой ответ был ключом к решению проблемы. - person pah; 18.06.2019
comment
Это действительно так, хотя это были скорее комментарии, которые вы оставили под моим вопросом, чем предоставленный вами ответ, но в любом случае спасибо :) - person Constikri; 18.06.2019
comment
Добро пожаловать. Мой ответ объясняет основную причину вашего EXC_BAD_ACCESS. Остальное было скорее догадками вокруг вашего окружения. ;-) - person pah; 18.06.2019