一、命令行下共终端的调试方法

1. 首先,在用mpi的编译器编译程序的时候,象平常一样,需要加入调试选项 "-g",

2. 其次,运行的时候,可用以下命令:

$ mpirun -gdb -n 3 ./runMpi

就能进入gdb的并行调试环境,如:

0-2: (gdb)

用平常的 gdb 命令,比如说:打印变量的 print 命令时,将会打印所有进程上该变量的值,如:

0-2: (gdb) p local_max

将打印的结果为,

0: $1 = 15060

1: $1 = 18228

2: $1 = 15412

如果只是想打印某个进程上该变量的值,则可以通过 "z rank" 进入到 rank 进程的调试环境,如:

0-2: (gdb) z 0

就进入到了 0 号进程的调试环境了,运行上述打印命令,则显示结果为 0 号进程的:

0: (gdb) p local_max

0: $2 = 15060

而,

0: (gdb) z 2

则就可以进入 2 号进程的调试环境了。那要恢复默认的所有进程公用的调试环境,怎么办呢?

2: (gdb) z

输入 z 命令,则就可以恢复到默认的公用调试环境了。

二、每个进程单独开启一个终端进行调试

1. 打开 4 个 xterm 终端,分别对应进程 0-3 的调试环境,用户可以分别在进程对应的终端中输入调试命令

$mpirun -np 4 xterm -e gdb ./runMpi

三、gdb调试多个cpp文件

例程源码如下:

//add.h
extern int add(int,int);

//add.c
int add(int a, int b)
{
    int r = a + b;
    return r;
}

//mul.h
extern int mul(int,int);

//mul.c
int mul(int a, int b)
{
    int r = a * b;
    return r;
}

//main.c
#include "add.h"
#include "mul.h"
#include <stdio.h>
int main()
{
    int a,b;
    int r;
    scanf("%d %d",&a,&b);
    r = add(a,b);
    r = mul(a,b);
    return 1;
}

makefile如下:

cal: main.o add.o mul.o
 gcc -g -o cal main.o add.o mul.o
main.o:main.c add.h mul.h
 gcc -g -c main.c
add.o:add.c add.h
 gcc -g -c add.c
mul.o:mul.c mul.h
 gcc -g -c mul.c

调试步骤

1.gdb cal

2.list
可以看到main.c的代码

3.break 9
在r = add(a,b);处设置断点

4.run
运行后在停止与端点

5.s

6.list
可以看到add.c的代码,说明可以对add.c里面的函数调试了

注意:

1. 对于有命令行的情况

比如:

mpiexec -n 3 ./docclass ./ ./keyword ./result

“./ ./keyword ./result”是该程序的三个参数,如果还按照上面的方法,则会得到如下错误:

vm1:/usr/local/mpich2-1.2.1p1/proinfo # mpiexec -gdb -n 3 ./docclass ./ ./keyword ./result
0-2:  mpdgdbdrv (? 64): when using gdb, pass cmd-line args to user pgms via the 'run' cmd
只能采用如下方式:

vm1:/usr/local/mpich2-1.2.1p1/proinfo # mpiexec -gdb -n 3 ./docclass

<==不输参数
0-2:  (gdb) run ./ ./keyword ./result   <==输入参数
0-2:  Continuing.

参考:

http://hi.baidu.com/royee193/blog/item/2252671aab337d5f42a9ad79.html

http://blog.csdn.net/allowmego/article/details/1524839

转自:http://blog.sina.com.cn/s/blog_50d4c97b01011fkl.html

转载于:https://blog.51cto.com/yangshaofeng/1764062

gdb调试mpi程序相关推荐

  1. 用gdb调试mpi程序的一些心得

    Linux下MPI (Message Passage Interface) 的程序不太好调试,在windows下vs2005以上的IDE有集成的简便MPI调试工具,没有用过,有兴趣的可以试验一下.下面 ...

  2. 使用 GDB 调试多进程程序

    使用 GDB 调试多进程程序 来源 https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html GDB 是 linux 系统上常 ...

  3. 用 GDB 调试Linux程序及有用技巧

    用 GDB 调试Linux程序及有用技巧(转) armlinux   2008-06-19 10:48   阅读91   评论0 字号: 大大  中中  小小 GNU的调试器称为gdb,该程序是一个交 ...

  4. GDB调试多线程程序

    (1)gdb ./program运行程序 (2)程序挂掉 (3)info thread查看程序挂掉瞬间所有运行线程执行到的位置: 此时,可以粗略看到哪些线程执行出现了问题(线程号前面带*的表示当前线程 ...

  5. [Golang]搭建gdb调试go程序

    搭建gdb调试go程序 前言 gdb安装 更新brew 查看是否存在gdb镜像 安装gdb go build编译 gdb执行 gdb命令 gdb调试 问题整理 参考 前言 学会使用gdb进行golan ...

  6. 用 gdb 调试 GCC 程序

    用 gdb 调试 GCC 程序       Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构 ...

  7. 【转】gdb调试多进程程序

    GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大.对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统: 进程 Proc2 是 Proc1 的子 ...

  8. 【php】使用gdb调试php程序

    1.简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.同时GDB也具有例如d ...

  9. qt单步调试linux程序,用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行

    前言 本人交叉编译环境 Ubuntu 10.04(虚拟机),编译工具链 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1 1.在虚拟机Ubuntu 10. ...

最新文章

  1. CM5.x配置spark错误解决
  2. Windwos中system、System32、SysWOW64区别
  3. [蓝桥杯][2018年第九届真题]日志统计(树状数组)
  4. html笔记(五)2D、3D、3D动画
  5. 对比MS Test与NUnit Test框架
  6. android drawable 对象,Android Drawable开发简介
  7. C++ Aggregate 与 POD(Plain Old Data)的解释
  8. 【答题卡识别】基于matlab GUI hough变换答题卡判定与成绩统计【含Matlab源码 752期】
  9. 无线网络何连不到服务器,关于电脑宾馆连接不上无线网络的解决方法
  10. RFC2544背靠背测试——信而泰Renix测试软件实操
  11. python中 F “{表达式}”的用法【详细】
  12. AHRS、IMU和INS对比
  13. 网易云音乐编码_为什么有那么多编码员音乐家?
  14. 【无法关闭的网页】HTML网页源码分享#无法拒绝的表白源码
  15. 删除Excel数据中的空格
  16. 还在烦恼Word怎么转PPT?教你一种方法告别复制粘贴
  17. bt2mag_粉碎Mag CSS问答#2
  18. Android多线程实现方式及并发与同步,架构师必备技能
  19. centos6.5kvm虚拟化技术
  20. Android win10 平板 省电,Win10平板模式省电吗?如何设置?

热门文章

  1. [DEncrypt] DESEncrypt--加密/解密帮助类 (转载)
  2. Qt4: Show an image in your widget – 在Qt里面显示图像
  3. Spring Bean垃圾回收
  4. 如何从低端面畜到高端面霸
  5. 多台Linux服务器SSH相互访问无需密码
  6. iOS边练边学--UIScrollView的属性简单使用,代理的简单介绍以及内容缩放
  7. 【理论】【转】Android项目重构之路:架构篇
  8. 电子工程师名片——FAT16文件系统(转)
  9. 转贴:Google Reader:信息背后的信息,无可替代的伟大
  10. 使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效