我正在使用 GDB 在 Linux 上为 MPI C++ 进行调试。
我不能使用以下命令:
xterm -e gdb mpirun -np 1 ./myApplication
为可执行程序打开一个窗口./myApplication
:xterm 终端出现然后立即消失。
为什么会这样?
我可以使用以下命令打开一个 xterm:
xterm or xterm -e gdb.
非常感谢任何帮助。
@chatan 几乎是对的。
如果您想gdb
在将参数传递给该程序时调用该程序,则需要使用 gdb 的--args
选项。例如(我没有mpirun
,所以我会使用/bin/sleep
):
$ gdb --args /bin/echo hello
[...]
Reading symbols from /bin/echo...(no debugging symbols found)...done.
(gdb) run
Starting program: /bin/echo hello
hello
Program exited normally.
gdb
不会自动开始运行程序;它等待输入。
如果没有该--args
选项,gdb
则将其-np
作为gdb
选项,而不是作为mpirun
. 由于gdb
没有-np
选项,它以错误消息终止:
$ gdb mpirun -np 1 ./myApplication
gdb: unrecognized option '-np'
Use `gdb --help' for a complete list of options.
当您运行时xterm -e gdb mpirun -np 1 ./myApplication
,xterm
它会调用gdb
,gdb
并以错误消息xterm
终止,并在您有机会看到该消息之前终止。
所以这应该可以解决问题:
xterm -e gdb --args mpirun -np 1 ./myApplication
当然,您仍然必须在其中键入run
命令gdb
来调用mpirun
. (如果你使用的是 gdb,你可能已经知道了。)
为了将来参考,如果您在运行程序时遇到问题xterm -e
,请尝试自行运行。
无论如何,您的命令不会按您期望的方式工作。gdb 将忽略“mpirun”之后的参数。没有任何参数的裸 mpirun 命令将立即退出(只需尝试在终端中手动运行 mpirun)。由于您的 xterm 开始执行该命令,因此该过程完成后它会消失。
您需要做的是,打开一个 xterm。然后运行“gdb mpirun”命令。
您应该最终进入 gdb 命令提示符。在此提示下,您需要发出以下命令:
(gdb) 运行 -np 1 ./myApplication
现在您的应用程序应该在 gdb 中运行。