2015-10-28 4 views
-4

Мой BoostMPI код компилируется без проблем:Как я могу отлаживать код C++ MPI?

Но когда работает, у меня есть проблемы. Я не уверен, какая строка в моем коде вызывает эту проблему. Что я мог сделать?

[dhcp-18-189-36-128:80590] *** Process received signal *** 
[dhcp-18-189-36-128:80590] Signal: Floating point exception: 8 (8) 
[dhcp-18-189-36-128:80590] Signal code: Integer divide-by-zero (7) 
[dhcp-18-189-36-128:80590] Failing at address: 0x10e4cab9f 
[dhcp-18-189-36-128:80590] [ 0] 0 libsystem_platform.dylib   0x00007fff8d0185aa _sigtramp + 26 
[dhcp-18-189-36-128:80590] *** End of error message *** 
+3

Отладчик, регистратор ............................................ –

+0

больше информации/видео-учебник Я мог бы следовать? – wasabi123

+0

А что вам нужно? У вас есть два сообщения: _ Исключение точки плавания: 8 (8) _ и _Integer divide-by-zero_ (7). Я думаю, что это начальная точка для поиска ваших ошибок. –

ответ

0

Моей рекомендацией было бы поместить модульные тесты вокруг вашего кода, чтобы убедиться, что он функционирует правильно в контексте, меньшем, чем все ваше приложение. Если вы новичок в модульном тестировании и тестировании, вы можете посмотреть мой tutorial on test-driven development from C++ Now! 2014.

Чтобы подробнее остановиться: когда вы сталкиваетесь с ошибкой, я пытаюсь написать неудачный модульный тест, демонстрирующий ошибку. Трудно сделать конкретную рекомендацию о том, какой тест писать, не видя никакого кода, но я предлагаю вам начать с запуска вашего кода в отладчике и установки отладчика для обработки любого сигнала исключения с плавающей запятой в качестве точки останова. Когда точка останова попадает из-за сигнала, проверьте стек вызовов в этой точке. Затем вы узнаете, какой код вызывает сигнал. Затем вы можете написать модульный тест, который вызывает этот код с теми же аргументами. Тест вашего устройства теперь должен завершиться неудачей, воспроизведя проблему и вызвав тот же сигнал с разделителем на нуль. Затем вы можете изменить свою реализацию и повторно запустить тест, чтобы убедиться, что сигнал больше не вызван.

Смежные вопросы