Укажите аргументы для программы под gdbserver на MSYS

Мне нужно было отладить программу асинхронно, потому что она остановилась, и Ctrl+С убитый gdbвместо того, чтобы прерывать программу (это на MinGW / MSYS).

Кто-то намекнул тот 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

(Поставка 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

Решение

Да! «Вводить в заблуждение» — более подходящий термин. (Вводит в заблуждение, по крайней мере, как это относится к этой версии gdbserver на этой платформе.)

Первый аргумент буквально первый аргумент (argv) дано низшему. Обычно это имя исполняемого файла. Итак, сработало следующее:

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

То есть, руководство должно было сказать, чтобы быть последовательным:

target> gdbserver host:2345 emacs emacs foo.txt
1

Другие решения

Я не могу помочь вам с gdbserver,
но если вы просто ищете способ прервать программу, запущенную в mingw / msys gdb
(Похожий на Ctrl+С на Linux)
взглянуть на DebugBreak

1

По вопросам рекламы [email protected]