我需要异步调试程序,因为它已经停止,并且 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
也就是说,我的程序认为它没有参数。
手册页错了吗?
答案 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