C语言 GDB:同时调试2个进程

uqjltbpv  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(53)

假设我想调试我的程序“Program.exe”的2个示例,每个示例都有不同的参数(“one”和“two”)。我还需要同时运行两个进程(或至少在1秒内)。
我读到过GDB的调试器可以让你在一个会话中运行和调试多个程序。这是我的尝试:

file Program.exe
set args one

add-inferior
inferior 2
file Program.exe
set args two

run

字符串
但没有成功。只有一个下级在跑
有什么想法吗?我在考虑这两个选择:

  • 创建一个新的程序来fork进程,然后GDB可以通过“set fork-on-fork off”来处理这两个进程,但这种方法在我看来有点丑陋。
  • 正常启动两个进程,然后在GDB中通过PID将它们连接起来。但我的环境是Windows,我不知道如何这样做,也不知道如何通过命令行参数找到PID。

先谢谢你了!

x9ybnkn6

x9ybnkn61#

你的尝试几乎成功了,你只需要额外的starti。在你启动每个进程之后,一个continue可以用来启动所有进程。

$ gdb
No symbol table is loaded.  Use the "file" command.
(gdb) set schedule-multiple on

字符串
请记住设置上述内容,否则第二个starti将挂起。
从第一个下级开始。

(gdb) file bash
Reading symbols from bash...
(No debugging symbols found in bash)
(gdb) set args -c "echo one; sleep 1; echo three"
(gdb) starti
Starting program: /usr/bin/bash -c "echo one; sleep 1; echo three"

Program stopped.
0x00007ffff7fe52a0 in ?? () from /lib64/ld-linux-x86-64.so.2


添加并启动第二次劣化。

(gdb) add-inferior
[New inferior 2]
Added inferior 2 on connection 1 (native)
(gdb) inferior 2
[Switching to inferior 2 [<null>] (<noexec>)]
(gdb) file bash
Reading symbols from bash...
(No debugging symbols found in bash)
(gdb) set args -c "sleep 0.5; echo two; sleep 1; echo four"
(gdb) starti
Starting program: /usr/bin/bash -c "sleep 0.5; echo two; sleep 1; echo four"

Thread 2.1 "bash" stopped.
0x00007ffff7fe52a0 in ?? () from /lib64/ld-linux-x86-64.so.2


继续两条走廊。

(gdb) continue
Continuing.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
one
[Detaching after fork from child process 364313]
[Detaching after fork from child process 364314]
two
[Detaching after fork from child process 364315]
three
[Inferior 1 (process 364277) exited normally]


此时,inferior 1停止,gdb停止所有操作。如果您不喜欢这种行为,请参考https://stackoverflow.com/a/27163134/5267751
我们继续跑第二次,直到完成。

(gdb) info inferior
  Num  Description       Connection           Executable        
* 1    <null>                                 /usr/bin/bash     
  2    process 364312    1 (native)           /usr/bin/bash     
(gdb) inferior 2
[Switching to inferior 2 [process 364312] (/usr/bin/bash)]
[Switching to thread 2.1 (Thread 0x7ffff7cda740 (LWP 364312))]
#0  0x00007ffff7e4e187 in wait4 () from /usr/lib/libc.so.6
(gdb) continue
Continuing.
four
[Inferior 2 (process 364312) exited normally]
(gdb)

相关问题