gdb调试mpi程序
一、命令行下共终端的调试方法
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程序相关推荐
- 用gdb调试mpi程序的一些心得
Linux下MPI (Message Passage Interface) 的程序不太好调试,在windows下vs2005以上的IDE有集成的简便MPI调试工具,没有用过,有兴趣的可以试验一下.下面 ...
- 使用 GDB 调试多进程程序
使用 GDB 调试多进程程序 来源 https://www.ibm.com/developerworks/cn/linux/l-cn-gdbmp/index.html GDB 是 linux 系统上常 ...
- 用 GDB 调试Linux程序及有用技巧
用 GDB 调试Linux程序及有用技巧(转) armlinux 2008-06-19 10:48 阅读91 评论0 字号: 大大 中中 小小 GNU的调试器称为gdb,该程序是一个交 ...
- GDB调试多线程程序
(1)gdb ./program运行程序 (2)程序挂掉 (3)info thread查看程序挂掉瞬间所有运行线程执行到的位置: 此时,可以粗略看到哪些线程执行出现了问题(线程号前面带*的表示当前线程 ...
- [Golang]搭建gdb调试go程序
搭建gdb调试go程序 前言 gdb安装 更新brew 查看是否存在gdb镜像 安装gdb go build编译 gdb执行 gdb命令 gdb调试 问题整理 参考 前言 学会使用gdb进行golan ...
- 用 gdb 调试 GCC 程序
用 gdb 调试 GCC 程序 Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构 ...
- 【转】gdb调试多进程程序
GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大.对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考虑下面这个三进程系统: 进程 Proc2 是 Proc1 的子 ...
- 【php】使用gdb调试php程序
1.简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.同时GDB也具有例如d ...
- qt单步调试linux程序,用Qt 调用GDB调试 Arm程序 详细步骤----可单步执行每一行
前言 本人交叉编译环境 Ubuntu 10.04(虚拟机),编译工具链 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.1 1.在虚拟机Ubuntu 10. ...
最新文章
- CM5.x配置spark错误解决
- Windwos中system、System32、SysWOW64区别
- [蓝桥杯][2018年第九届真题]日志统计(树状数组)
- html笔记(五)2D、3D、3D动画
- 对比MS Test与NUnit Test框架
- android drawable 对象,Android Drawable开发简介
- C++ Aggregate 与 POD(Plain Old Data)的解释
- 【答题卡识别】基于matlab GUI hough变换答题卡判定与成绩统计【含Matlab源码 752期】
- 无线网络何连不到服务器,关于电脑宾馆连接不上无线网络的解决方法
- RFC2544背靠背测试——信而泰Renix测试软件实操
- python中 F “{表达式}”的用法【详细】
- AHRS、IMU和INS对比
- 网易云音乐编码_为什么有那么多编码员音乐家?
- 【无法关闭的网页】HTML网页源码分享#无法拒绝的表白源码
- 删除Excel数据中的空格
- 还在烦恼Word怎么转PPT?教你一种方法告别复制粘贴
- bt2mag_粉碎Mag CSS问答#2
- Android多线程实现方式及并发与同步,架构师必备技能
- centos6.5kvm虚拟化技术
- Android win10 平板 省电,Win10平板模式省电吗?如何设置?
热门文章
- [DEncrypt] DESEncrypt--加密/解密帮助类 (转载)
- Qt4: Show an image in your widget – 在Qt里面显示图像
- Spring Bean垃圾回收
- 如何从低端面畜到高端面霸
- 多台Linux服务器SSH相互访问无需密码
- iOS边练边学--UIScrollView的属性简单使用,代理的简单介绍以及内容缩放
- 【理论】【转】Android项目重构之路:架构篇
- 电子工程师名片——FAT16文件系统(转)
- 转贴:Google Reader:信息背后的信息,无可替代的伟大
- 使用某些 DOCTYPE 时会导致 document.body.scrollTop 失效