如何进入gdb上运行的进程?


0

所以我试图调试一个在两个节点上运行的程序。我使用yod作为任务启动器。

 yod -hosts node01,node02 ./dist_task -nl 2

该计划被卡住了。所以我想像这样使用gdb

 yod -hosts node01,node02 gdb ./dist_task

我在node01中进入gdb会话,但对于node02,我无法进行。会发生什么,我可以看到远程节点上运行的进程(gdb ./dist_task)(htop为node02),但我无法进入它。我尝试连接(我只是试图附加到gdb进程),就像我们通常对一个进程一样,但在我的情况下,因为它已经是gdb我得到有关gdb的信息,但没有关于进程的信息。

ps:我试过通过xterm但也没有运气(我不能弹出两个xterm)


1
您是否依附于strace流程?顺便说一句waiting,并不意味着stuck
ott-- 2015年

但这样我只能看到系统调用..我其实想做gdb:p ..是的,你是正确的等待/卡住认为我会纠正它。
solti 2015年

另一种选择是ltrace,检查您的系统是否支持它。
ott-- 2015年

嗯,我确实有ltrace ..我可能会尝试这个
solti

Answers:


0

你在滥用 attach

来自文档:

attach process-id
    This command attaches to a running process—one that was started outside gdb

您可以尝试启动它们, yod -hosts node01,node02 ./dist_task -nl 2然后通过attachgdb提示符或使用命令附加到它们gdb -a <pid>


我这样做了,它不起作用..因为当我去做附加程序已经运行...我想从程序的开始做gdb
solti 2015年

您可能想要查看gdbserver。或者,在启动它之后立即向进程发送一个SIGINT,这样它就不会继续执行,并且GDB有附加的东西。
ssnobody 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.