使用 gdb 在多屏幕窗口中调试 MPI

2023-12-12

如果我有一个 MPI 程序,想要使用 gdb 进行调试,同时能够查看所有单独进程的输出,我可以使用:

mpirun -n <NP> xterm -hold -e gdb -ex run --args ./program [arg1] [arg2] [...]

当我有一个 GUI 可以玩时,这很好。但情况并非总是如此。

有没有类似的设置我可以使用screen这样每个进程都有自己的窗口?这对于在远程环境中进行调试非常有用,因为它允许我使用以下命令在输出之间切换Ctrl+a n.


I think this回答“如何调试 MPI 程序?”线程做你想做的事。


EDITS:

作为对评论的回应,您可以更轻松地做到这一点,尽管“简洁”并不完全是我会使用的术语:

通过 mpirun 启动独立屏幕 - 运行调试器和进程。我已调用会话 mpi,并且我正在传递我的库路径,因为它被屏幕剥离,而我的演示需要它(而且我在 Mac 上,因此 lldb 和 DYLD):

mpirun -np 4 screen -AdmS mpi env DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH lldb demo.out

然后启动一个单独的屏幕会话,我称之为“调试”:

screen -AdmS debug

Use screen -ls列出正在运行的会话:

>> 屏幕-ls

屏幕上有:

19871.mpi(分离)

19872.mpi(分离)

19875.mpi(分离)

19876.mpi(分离)

20105.debug(已分离)

现在在调试会话中启动 4 个新选项卡,将每个选项卡附加到其中一个 mpi 会话:

screen -S debug -X screen -t tab0 screen -r 19871.mpi
screen -S debug -X screen -t tab1 screen -r 19872.mpi
screen -S debug -X screen -t tab2 screen -r 19875.mpi
screen -S debug -X screen -t tab3 screen -r 19876.mpi

然后只需附加到您的调试会话screen -r debug。现在您有 4 个选项卡,每个选项卡都运行附加到 mpi 进程的调试器的串行实例,类似于您之前描述的 xterm 方法。它并不完全是最快的命令集,但至少你不需要修改你的代码或追逐 PID 等。


我尝试过另一种方法,但似乎不起作用:

启动独立屏幕

screen -AdmS ashell

启动两个 mpi 进程,在分离会话中启动新的屏幕选项卡,并使用我的演示 mpi 应用程序启动 lldb:

mpirun -np 1 screen -S ashell -X screen -t tab1 env DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH lldb demo.out : -np 1 screen -S ashell -X screen -t tab2 env DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH lldb demo.out

或者只是

mpirun -np 2 screen -S ashell -X screen env DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH lldb demo.out

然后附加到屏幕上

screen -r ashell 

您将有 3 个选项卡,其中 2 个选项卡与您的程序一起运行 lldb,另外一个选项卡与您的标准 shell 一起运行。不幸的是,当您尝试运行程序时,每个进程都认为它是通信世界中唯一的进程,我不知道该怎么办......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gdb 在多屏幕窗口中调试 MPI 的相关文章

  • 从命令输出中设置 GDB 中的环境变量

    我试图在挑战中利用缓冲区溢出 缓冲区从环境变量中获取其值 在 GDB 中 我知道您可以使用以下命令设置环境变量 set environment username test 但是我需要传递用户名变量特殊字符 所以我需要执行以下操作 set e
  • GDB错误:“进程记录:当前架构不支持记录功能”

    我正在尝试在 GDB 中进行反向执行 特别是target record按照说明在 gdb 中运行我的程序后here https stackoverflow com questions 1206872 go to previous line
  • “劣质调试器”一词中的“劣质”是什么意思?

    我不太明白GDB手册中对inferior的解释 谷歌也没有提供任何更有帮助的信息 谁能简单地解释一下 低等 劣质 是一个通用术语 表示 您正在使用 gdb 来调试的东西 通常是在模拟器或通过串行线路连接的其他硬件上运行的进程或内核 当您使用
  • Eclipse 调试模式下的 GDB 找不到 stdlib/rand.c

    我试图让 gdb 在 ubuntu 上与 eclipse cdt 一起运行 以开始调试一些简单的程序 所以我做了我认为必要的步骤来让它运行 1 创建可执行项目 2 Compile 3 Run 4 创建文件 gdbinit 并将其放在主项目文
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • gdb 声称它不知道如何运行

    我在 Mac Pro 上的 Mac OS X 10 6 6 上使用 Xcode 3 2 3 来构建 GrowlTunes 的修订版 5fd480ef577f咆哮开发存储库 http growl info hg growl developme
  • GDB - 将地址映射到源代码中的行和列

    gcc 和 clang 都有选项 gcolumn info 描述如下 将位置列信息发出到 DWARF 调试信息中 而不仅仅是文件和行 我已经使用此选项编译了我的二进制文件 现在我有一些指令的地址 想将其翻译回源文件 行号和列 有没有办法在g
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • MPI C++ 矩阵加法、函数参数和函数返回

    过去两年我一直在网上学习C 最后我需要深入研究MPI 我一直在搜索 stackoverflow 和互联网的其余部分 包括http people sc fsu edu jburkardt cpp src mpi mpi html http p
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 如何在 VSCode 中配置调度程序锁定 gdb 选项

    我可以添加额外的参数launch json到 gdb 通过miDebuggerArgs https code visualstudio com docs cpp launch json reference midebuggerargs 像这
  • 使用 eclipse 调试 OpenJDK 源代码

    在我的项目中 我想使用 eclipse 调试 OpenJDK 版本 8 的 C C 源代码 为此 我做了以下工作 编译了 OpenJDK8 with debug level slowdebug使用这个readme http hg openj
  • 从 gdb 设置 std::string 变量值?

    是否有可能 当调试器在断点处停止时 修改 std string 变量的值 而不需要采取诸如调整当前缓冲区的内存映像之类的黑客手段 例如类似于 set var mystring hello world 试试这个 经过测试并且对我有用 call
  • 如何在Linux中诊断Python进程占用CPU

    我的 python 进程在自动化脚本中的某个时刻开始在基于 Linux 的系统 Ubuntu 上占用 CPU 我正在尝试在 GDB 中调试这个问题 我对 GDB 还很陌生 是否有任何 GDB 命令可以提供有关哪个线程正在使用大部分 cpu
  • 使用 Cygwin64 的 Fortran MPI

    我正在使用 Codeblock IDE 编写和编译我的 Fortran 程序 现在我想将 MPI 包含到我的 GNU Fortran 编译器中 在遵循 GNU GCC 编译器的一些指南之后 我突然想到我需要为 MPICH2 设置以下内容 有
  • mpi4py:关闭 MPI Spawn?

    我有一些 python 代码 我经常在其中生成多个进程 我收到错误 ORTE ERROR LOG The system limit on number of pipes a process can open was reached in f
  • MPI 中可变大小的消息

    是否有库调用允许使用 MPI 发送 接收可变大小的消息 解决方法是在第一条消息中发送数据大小 并在其后面加上实际的有效负载 但我想知道是否有一个约定来组合这两个单独的消息 提供给 MPI Recv 的计数只是一个上限 MPI Get cou
  • 如何编写 PMPI 库来包装 MPI 函数

    我正在尝试编写 PMPI 库 但不确定正确的步骤 库和链接的新手 我编写了一个包装 MPI Send 函数的基本文件 假设它是一个名为 lib c 的文件 我应该执行哪些步骤 以便当我使用 MPI Send 运行 c 代码时 我的包装器代码
  • 如何将 CLI 参数传递给 GDB 中“定义”内的“命令”?

    E g define mycmd break arg0 commands print arg0 end end mycmd myfunc continue Prints 1 void 而不是预期的myfunc 因为 arg0当命令被点击时被

随机推荐

  • 您能否在 C# 中将一个委托的结果链接为另一个委托的输入?

    我正在寻找一种方法来链接多个代表 以便一个代表的结果成为下一个代表的输入 我试图在方程求解程序中使用它 其中部分是通过不同的方法完成的 这个想法是 当您构建方程时 程序会添加代表并按特定顺序链接它们 以便可以正确求解 如果有更好的方法来解决
  • 当向本地主机节点应用程序发出多个请求时,Google Chrome 将请求一一排队

    最近 我正在测试 Nodejs Express Web 应用程序的异步行为 我的代码很简单 const express require express const app express const port 3000 app get re
  • 如何防止强制推送到 GitHub Wiki 存储库?

    对于那些不知道的人来说 每个带有 wiki 的 GitHub 存储库都会自动拥有一个 wikirepo 它只是一个专门用于 wiki 内容的常规 git 存储库 前任 https github com junegunn fzf wiki 您
  • Azure 数据工厂:对于特定属性,每个 item() 值不存在

    我的每个活动都有一个存储过程 SP 其中我显然使用 item 输入值 现在假设 SP 的输入值为 item a item b 和 item c 问题 对于 foreach 的某些迭代 item b 不存在 这是预期的 那么我应该如何在存储过
  • AngularJS [$injector:unpr] 未知提供者:dataProvider <- data <- PageCtrl

    我看过其他答案 但到目前为止没有任何帮助我 我在文件中使用以下代码时收到此错误 angular module myApp page ngRoute config routeProvider function routeProvider ro
  • 发现元素可见后无法使用递归来定位元素

    我的问题 我正在尝试使用页面对象中的部分来单击 Nightwatch 下拉列表中的选项 我不确定这是否是部分声明的问题 或者我遗漏了一些与范围相关的内容 问题是它发现该元素可见 但是当它尝试单击时会抛出错误 无法使用递归找到它 我可以尝试使
  • R:Git + Shiny服务器自动化部署

    我有一个 Shiny 服务器安装 以及一个适用于我的 Shiny 应用程序的 Git 存储库 我开发了 Shiny 应用程序并将其推送到 Git 存储库 并且我希望 Shiny 服务器从 Git 存储库加载该应用程序的最新版本 我怎样才能做
  • IE Flexbox justify-内容中心溢出问题

    在 IE11 上查看以下演示时 存在内容显示右对齐并被推到屏幕之外的问题 Codepen 演示 以下是证明内容中心合理性的代码 search results display webkit box display webkit flex di
  • 尝试禁用浏览器的后退按钮

    我写了两个 HTML 文件 登录 html a href Home html Next Page a 首页 html a href Login html gt gt Prev Page a 我正在尝试禁用浏览器的后退按钮 如果我在 c
  • 绘图中的注释自动放置

    我有代码可以轻松地自动处理着色和绘制多个图 对我来说 我想让注释变得更容易 goal 如果注释 xy 与前一个注释冲突 请向上移动 直到与其他注释不发生冲突 如果有一个功能已经能够实现这一点 那将是一个梦想 但我找不到 否则 列出注释并在坐
  • 如何从流中准确读取一个字符?

    我有一个带有一些文本数据的流 可以是 ASCII UTF 8 Unicode 编码是已知的 我需要从流中准确读取一个字符 而不再前进流位置 StreamReader 是不合适的 因为它会积极地从流中预取数据 Ideas 如果您想一次一个字节
  • 正则表达式匹配确切的数字,如果它存在于字符串中则不匹配

    我的正则表达式 3 b Matches 103 134 256 3 我希望它只匹配唯一的 3 数字 3 将是一个动态数字 正则表达式必须匹配该确切数字 而不是其他数字 如果该数字存在于另一个数字 如 103 中 则它不能匹配 那么它不应该匹
  • 对 NHibernate 缓存搜索的影响,其结果包括映射为公式的计算值(例如排名)

    当在 NHibernate 中使用公式定义计算属性时 当公式根据查询限制 尤其是查询缓存 改变其结果时 会产生什么影响 更具体地说 请考虑以下简单的 C 类 public class Entity public Entity public
  • 使用 Linux binutils 设置 ELF 映像基地址的优雅方法?

    对于个人项目 我需要编写一个在非默认内存地址加载的可执行文件 从这个问题 我知道我可以设置 ELF 的入口地址并手动修改节地址 以便可执行文件有效地基于我选择的某个地址 然而 答案表明 只有当我不进行 glibc 初始化 这个项目需要它 时
  • 无序线程问题

    我问过关于锁定的问题here人们回答说我的锁实现没有问题 但我发现了问题 这是相同的锁实现 我得到了奇怪的结果 我希望看到数字从 1 开始 但它是从 5 开始 示例如下 class Program static object locker
  • asp.net mvc 不断用 .wml 覆盖 text/html 内容类型

    我正在开发一个可以在移动 手机 设备上查看的网站 我只是使用纯 HTML 4 01 没有什么特别的 除了诺基亚 Series 40 第 1 5 版之外 这些页面在我们测试过的所有移动浏览器上都呈现良好 仔细观察 IIS 似乎会自动渲染内容类
  • BitBucket - 直接添加到开发分支而不是主分支

    我们正在将 SCM 更改为 BitBucket 目前我们使用 Clearcase SCM 我们在不同阶段 流中拥有代码 开发 UAT 和生产 其中开发具有开发人员当前正在处理的代码 UAT 已完成由 BP 测试的更改 而生产具有部署到生产的
  • 为文本区域内的线条着色

    有没有办法让textarea显示颜色的线条 我想要实现的是每隔一行都着色 即白色 灰色 白色 灰色 白色 灰色 以获得更好的可读性 用户应该写很多东西 比如 输入名称 每一个都从新行开始 无论如何 我确实使用 jQuery 所以如果他们为此
  • 带返回值的跨域弹窗

    这是设置 我在两个不同的域上有两个网站 www website1 com www someotherwebsite com 这就是我想做的 当用户开机时www website1 com然后单击一个链接 我想要一个弹出窗口显示www some
  • 使用 gdb 在多屏幕窗口中调试 MPI

    如果我有一个 MPI 程序 想要使用 gdb 进行调试 同时能够查看所有单独进程的输出 我可以使用 mpirun n