6个版本 (3个重大更改)
| 新 0.5.1 | 2024年8月10日 | 
|---|---|
| 0.5.0 | 2023年5月10日 | 
| 0.4.1 | 2023年4月19日 | 
| 0.2.0 | 2023年1月27日 | 
| 0.1.0 | 2022年12月16日 | 
#98 in 调试
每月 98次下载
28KB
634 行
MPIGDB
围绕mpiexec、gdbserver和gdb的一个包装器,通过适度的进程数量使调试MPI程序更加容易。
示例用法

GDB扩展和有用命令
此包装器定义了几个GDB扩展命令,可以帮助使事情更容易。
mpic 继续所有进程
mpict 继续当前线程,并在有停止的下一个线程上切换(如果有的话)
mpip 使用 -t $tid 在所有或子集线程上打印
mpib 使用 -t $tid 在所有或子集线程上设置断点
mpiw 当所有进程退出时执行一个命令
您可能还应该了解以下内置命令
thread apply all 将命令应用于所有线程
continue & 在GDB中,任何以 & 结尾的命令都在“后台”运行命令,允许用户继续与GDB交互。在这种情况下,在后台继续此线程
info threads 获取线程及其状态的列表
interupt 如果当前线程正在运行,则停止它。
thread $tid 切换到线程ID
CLI参数
- --mpigdb_frontend要使用的调试前端,默认为- gdb。还接受- vscode以支持为VSCode编写launch.json文件
- --mpigdb_dbg_arg将参数传递给GDB
- --mpigdb_helper工作节点上的MPI GDB辅助程序的路径
- --mpigdb_gdbserver工作节点上的gdbserver辅助程序的路径。默认 "gdbserve"
- --mpigdb_gdbgdb可执行文件路径。默认: "gdb"
- --mpigdb_port主进程连接的端口。默认 "8000"
- --mpigdb_mpi_flag传递给mpigdb的标志
- --mpigdb_dryrun打印命令,但不启动mpigdb
标志 --interpreter=mi 和 --tty= 将转发给GDB,希望将来能在VSCode中使用。
示例
mpigdb-np8 -- ./play/build/heatdist
使用8个进程启动heatdist。
mpigdb-np8 --mpigdb_dbg_flag-x--mpigdb_dbg_flag/tmp/debug.dbg-- ./play/build/heatdist
使用脚本 /tmp/debug.dbg 在8个进程上启动heat dist
mpigdb--mpigdb_gdb cuda-gdb--mpigdb_gdbserver cuda-gdbserver-np8 -- ./play/build/heatdist
相同,但使用cuda-gdb调试GPU程序
构建和安装
依赖
- gdb12.1或更高版本,带有- gdbserver(有时单独打包)和python支持,如果从源代码编译,可能已禁用
- 包括mpiexec mpiexec的MPI安装
- python 3.8或更高版本
- Rust+Cargo 1.65或更高版本
早期版本可能也可以工作,但未经过测试
限制和已知错误
对于具有有意义规模的HPC系统,我们可能需要与PMIx集成,但我们目前还没有这样做。
目前与LLDB不兼容,LLDB是MacOS所必需的 -- 欢迎PR。
对VSCode的支持有限。 查看有关完整实现的某些问题的issue。
致谢
感谢@mystery-e204和他的mpidb工具,该工具演示了如何生成可用于VSCode的文件。这种方法有限,因为VSCode中的调试实例是分开的,并且不能很容易地一起控制。
依赖
~2–13MB
~156K SLoC