我该如何调试C ++ MPI代码?

时间:2015-10-28 19:31:39

标签: c++ mpi

我的Boost 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 ***

1 个答案:

答案 0 :(得分:-1)

我的建议是在代码周围进行单元测试,以验证它在比整个应用程序更小的上下文中正确运行。如果您不熟悉单元测试和测试驱动开发,可以查看我的tutorial on test-driven development from C++ Now! 2014

进一步阐述:当遇到错误时,我尝试编写一个演示错误的失败单元测试。在没有看到任何代码的情况下,很难对要编写的测试做出具体建议,但我建议您首先在调试器中运行代码并设置调试器以将任何浮点异常信号视为断点。当由于信号而触发断点时,检查该点处的调用堆栈。然后你就会知道导致信号的代码是什么。然后,您可以编写一个单元测试,使用相同的参数调用该代码。现在,您的单元测试应该通过重现问题并导致相同的除零信号而失败。然后,您可以更改实施并重新运行测试,以验证信号是否已不再发生。