IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> ubuntu环境下mpi多进程程序利用gdb进行调试 -> 正文阅读

[系统运维]ubuntu环境下mpi多进程程序利用gdb进行调试

ubuntu环境下mpi多进程程序利用gdb进行调试

问题:
在Ubuntu环境下进行多线程调试比较麻烦,商业软件买不起,对于自己的作业而言,也没必要用到,因此,就打算用gdb去调试,有教程介绍在linux下用vscode进行调试,但是,我搞了很长时间都没有实现,一大堆的参数实在是搞不清楚如何搞,因此,直接终端gdb调试,这里,因为没有用到vscode的一个终端,因此,需要xterm虚拟终端模拟器去显示一个终端,这样方便我们软件的调试

调试现场:

gdb多进程调试调试

在本实例中,利用xterm终端模拟器实现多个进程分别调试
xterm是一款虚拟终端模拟器,在ubuntu环境下,可以利用xterm窗口实现针对各个进程的分别调试。
在上图中,就是针对针对进程数为3的程序进行gdb调试。

1.实现打开xterm窗口

  1. 打开终端,输入命令以安装xterm。
    sudo apt install xterm -y

  2. 对于需要gdb调试的程序,在编译时需要加上-g。 比如,需要调试名为test.c 的文件: 编译命令: mpicc -g test.c -o test

  3. 执行命令: mpiexec -n 3 xterm -e gdb ./test -tui
    解释:(1)“3”代表用到3个核,即3个进程
    (2)xterm命令打开虚拟终端
    (3)-e也不知道什么作用,但一定要有
    (4)-tui是实现xterm里面显示源代码功能。在上图中,显示了源代码就是这个命令的作用

    注意:当执行这段命令时,显示的是:
    刚执行命令实现的效果
    没有显示源代码,只需要利用鼠标点击每个gdb窗口,按下回车键就可以看到源代码了。
    2.利用xterm虚拟终端进行gdb调试
    现场展示:
    开始调试

xterm打开的是虚拟终端,执行mpiexec时,由于使用到了gdb调试,因此,程序并没有直接运行。
需要在每个窗口都运行命令:
r
其中r就是run的缩写。

当然,有些程序需要读取外部文件。比如,我的程序需要读取GaussA1.txt GaussB1.txt,因此执行命令:
r GaussA1.txt GaussB1.txt
因为是3个进程,需要在每个窗口都输入上述命令,这样就实现了gdb调试。但直接命令会使得程序直接运行完,因此,最好提前设置断点。gdb设置断点的命令是break,比如需要在第30行设置断点,执行命令:
break 30

因此完整的mpi多进程程序调试过程:

  1. 编译: mpicc -g test.c -o test (如果需要用到自己写的头文件,可以这样写:mpicc -g test.c
    MyMPI.c -o test,其中, MyMPI.c是个人写的头文件)
  2. 执行: mpiexec -n 3 xterm -e gdb ./test -tui (3个进程,打开xterm)
    并且在每个窗口按回车键。
  3. break 30 (每个窗口设置断点,具体断点,随意设置)
  4. r GaussA1.txt GaussB1.txt (每个窗口打开文件GaussA1.txt和GaussB1.txt并且运行)

*接下来的运行,就是按照gdb的基本操作操作了,不过需要注意的是,对于调试mpi程序,会有一些代码比如MPI_Init(&argc,&argv), MPI_Bcast(tmp+i , m-i+1 , mpitype,root, MPI_COMM_WORLD)是会阻塞,因此,需要每个进程都执行到这些步骤,全部进程才能继续下去。*但若没执行到涉及到全部进程参与的代码时,各个进程是可以分别调试的,这样就很方便。
附加:xterm终端的设置:
初始的xterm的窗口不适合看,因此,可以自己修改xterm。
gedit ~/.Xresources
然后可以将内部改为:
代码
保存。
gedit ~/.Xdefaults
同样改为上述代码。

最后,执行命令
xrdb -merge ~/.Xresources
xrdb -merge ~/.Xdefaults
这样,有点样子的xterm就设置好了。

心得:
自己也是在这学期选修课上第一次接触多线程编程,linux除了上学期学到的树莓派写了个简单的程序后就再也没接触过linux了,更何况多线程mpi。因此,光是调试方法就找了2天,查看了很多网站博客,整理成这篇博客,希望能让学弟学妹少走弯路。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 12:01:39  更:2021-07-25 12:02:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 14:31:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码