Выполнение команды gdb перед подключением к процессу через код Visual Studio

Я пытаюсь пройтись по коду Postgresql, используя код Visual Studio в качестве моей IDE в Linux. Я использую прикрепить к конфигурации процесса в launch.json, чтобы добиться того же. Ниже приводится конфигурация launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "attach",
            "program": "/usr/local/pgsql/bin/postgres",
            "processId": 4165,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true,
                }
            ]
        }
    ]
}

Когда я начинаю отладку через графический интерфейс, он присоединяется к процессу. Но всякий раз, когда я добавляю точку останова, на консоли отладки выводится следующее сообщение:

Program received signal SIGINT, Interrupt.
0x00007ff5d084e31b in epoll_wait () from /lib64/libc.so.6

И не удается добавить точку останова. Из документации разработчика Postgres ( ссылка ) ясно, что нам нужно обойти прерывания, поступающие в gdb, выполнив следующую команду для gdb:

handle SIGUSR1 noprint pass

Я думаю, что эта команда в GDB может быть выполнена только перед присоединением процесса для отладки. Следовательно, когда я запускаю эту команду через консоль отладки в коде Visual Studio, я получаю следующую ошибку:

Unable to perform this action because the process is running.

Есть ли способ проинструктировать отладку кода Visual Studio, выдать «дескриптор обработки SIGUSR1 noprint» в gdb перед тем, как он присоединит целевой процесс через gdb?

Всего 1 ответ


После дополнительных исследований я нашел способ добиться этого с помощью файла ~ / .gdbinit. Этот файл может содержать команды, которые будут запускаться при каждом запуске GDB. У меня есть следующее содержание:

handle SIGUSR1 nostop noprint pass
handle SIGINT nostop noprint pass

Теперь происходит то, что, поскольку SIGINT переопределяется, каждый раз, когда IDE отключается от процесса, он перезапускается, потому что больше не может отключиться изящно.


Есть идеи?

10000