在MSYS上的gdbserver下为程序提供参数

时间:2014-01-29 11:34:12

标签: c++ gdb mingw msys gdbserver

我需要异步调试程序,因为它已经停止,并且 Ctrl + C 被杀gdb,而不是中断程序(这是在MinGW上) / MSYS)。

Someone hinted gdb在异步模式下不能在Windows上运行,实际上它没有(使用Asynchronous execution not supported on this target.消息),但gdbserver会。

所以我试试:

$ gdbserver localhost:60000 ./a_.exe 0
Process ./a_.exe created; pid = 53644
Listening on port 60000

(根据how the manpage says it's done提供0作为参数。)

然后在另一个终端:

$ gdb ./a_.exe
(gdb) target remote localhost:60000
Remote debugging using localhost:60000
0x76fa878f in ntdll!DbgBreakPoint () from C:\Windows\system32\ntdll.dll
(gdb) continue
Continuing.
[Inferior 1 (Remote target) exited with code 01]

虽然原版现在看起来像:

$ gdbserver localhost:60000 ./a_.exe 0
Process ./a_.exe created; pid = 53484
Listening on port 60000
Remote debugging from host 127.0.0.1
Expecting 1 argument: test case number to run.

Child exited with status 1
GDBserver exiting

也就是说,我的程序认为它没有参数。

手册页错了吗?

2 个答案:

答案 0 :(得分:1)

是的! “误导”是一个更合适的术语。 (误导性,至少在此平台上适用于此gdbserver版本。)

第一个参数实际上是给予下级的第一个参数(argv)。通常这是可执行文件的名称。所以,以下工作:

$ gdbserver localhost:60000 ./a_.exe whatever 0

也就是说,联机帮助页应该说是一致的:

target> gdbserver host:2345 emacs emacs foo.txt

答案 1 :(得分:1)

我无法帮助你使用gdbserver,
但是如果你只是想找到一种方法来中断在mingw / msys gdb中运行的程序
(类似于Linux上的 Ctrl + C ) 看看Debugbreak