C++ 为什么我的MPI应用程序会触发断点?

C++ 为什么我的MPI应用程序会触发断点?,c++,windows,visual-studio,mpi,breakpoints,C++,Windows,Visual Studio,Mpi,Breakpoints,我有一个简单的MPI应用程序,用于在输入所需值时将值从进程0传递到其他进程,但它会触发“else”上的断点 我错过了什么 #include "stdafx.h" #include "mpi.h" #include "stdio.h" #include "stdlib.h" int main(int argc, char* argv[]) { int rank; int value; int

我有一个简单的MPI应用程序,用于在输入所需值时将值从进程0传递到其他进程,但它会触发“else”上的断点

我错过了什么

#include "stdafx.h"
#include "mpi.h"
#include "stdio.h"
#include "stdlib.h"

int main(int argc, char* argv[])
{
    int rank;
    int value;
    int size;

    MPI_Status status;
    MPI_Init(&argc, &argv);

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    do
    {
        if (rank == 0)
        {
            printf("Enter the value: ");
            scanf_s("%d", &value);
            MPI_Send(&value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD);
        }

        else
        {
            MPI_Recv(&value, 1, MPI_INT, rank - 1, 0, MPI_COMM_WORLD, 
                     &status);
            
            if (rank < size - 1)
                MPI_Send(&value, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD);
        }

        printf("Process %d got %d ", rank, value);

    } while (value >= 0);
    
    MPI_Finalize();
    return 0;
}
#包括“stdafx.h”
#包括“mpi.h”
#包括“stdio.h”
#包括“stdlib.h”
int main(int argc,char*argv[])
{
整数秩;
int值;
整数大小;
MPI_状态;
MPI_Init(&argc,&argv);
MPI通信等级(MPI通信世界和等级);
MPI_通信大小(MPI_通信世界和大小);
做
{
如果(秩==0)
{
printf(“输入值:”);
扫描单位(“%d”和值);
MPI_发送(&value,1,MPI_INT,秩+1,0,MPI_COMM_WORLD);
}
其他的
{
MPI_Recv(&value,1,MPI_INT,排名-1,0,MPI_COMM_WORLD,
&地位);
如果(排名=0);
MPI_Finalize();
返回0;
}
这是调试的输出:

'MPIHelloWorld.exe'(Win32):加载了'C:\WINDOWS\SysWOW64\KernelBase.dll'。找不到或无法打开PDB文件

'MPIHelloWorld.exe'(Win32):加载了'C:\WINDOWS\SysWOW64\gdi32.dll'。找不到或无法打开PDB文件

“MPIHelloWorld.exe”(Win32):加载了“C:\Program Files(x86)\Bonjour\mdnsNSP.dll”。找不到或无法打开PDB文件

MPIHelloWorld.exe已触发断点

MPIHelloWorld.exe已触发断点

线程0x3308已退出,代码为0(0x0)

线程0x1dfc已退出,代码为0(0x0)

线程0x2e5c已退出,代码为0(0x0)

程序“[4400]MPIHelloWorld.exe”已退出,代码为0(0x0)

更新:

当我按下CTRL+5键时,控制台中会写入以下错误:

作业已中止: [排名]信息

[0]致命错误 MPI_发送中出现致命错误:
无效秩的值为1,但必须为非负且小于1。好的,我终于找到了答案

我无法将群集调试器用于MPI,因为我正在运行Visual Studio 2015 问题是只有一个进程在运行


我打开了CMD并使用“mpiexec.exe-n4 myMpiApp.exe”运行了我的应用程序,它运行正常。

您正在调试它吗?@Mgetz是的,我知道您是否在
MPI\u Send
设置了断点?@Mgetz否,我没有…该应用程序刚刚从控制台中断,一个断点出现在其他程序旁边。您是否检查了调试输出面板以查看它的内容?我敢打赌你正在引发一个异常