GDB:同时调试2个进程

问题描述 投票:0回答:1

假设我想调试程序“Program.exe”的2个实例,每个实例都有不同的参数(“一”和“二”)。另外我需要同时运行两个进程(或者至少在 1 秒内)。

我读到 GDB 的劣势允许您在单个会话中运行和调试多个程序。这是我的尝试:

file Program.exe
set args one

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

run

但没有成功。只有一个劣等者在运行

有什么想法吗? 我正在考虑这两个选择:

  • 创建一个新的程序来fork该进程,然后GDB可以通过“set detach-on-fork off”来处理这两个进程,但这种方法在我看来有点丑陋......

  • 正常启动两个进程,然后在GDB中通过PID附加它们。但我的环境是 Windows,我不知道该怎么做,也不知道如何通过命令行参数查找 PID。

提前致谢!

c++ c debugging parallel-processing gdb
1个回答
0
投票

你的尝试几乎成功了,你只需要另外

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) 
© www.soinside.com 2019 - 2024. All rights reserved.