Отключение SIGABRT для запуска программы (Valgrind) - PullRequest
1 голос
/ 26 января 2020

У меня есть задача отладить программу с помощью Valgrind. Программа становится очень медленной из-за использования Valgrind. Это проблема, потому что в программе есть поток-наблюдатель, который прерывает медленные потоки с помощью SIGABRT, если они проводят слишком много времени в определенных функциях. Программа находится в допустимом состоянии, когда она завершается таким образом, поэтому я хотел бы, чтобы она продолжала работать, даже если SIGABRT приведен. Я не могу изменить программу, чтобы отключить поток наблюдателя из исходного кода.

Теперь мой вопрос:

Предоставляет ли мне Valgrind или инструмент, совместимый с Valgrind, возможность сказать Программа: «Если вы получаете SIGABRT, рассматривайте его как нулевую операцию и включите go?»

1 Ответ

0 голосов
/ 26 января 2020

Вы можете достичь желаемого, запустив программу под valgrind + gdb, используя vgdb.

С помощью gdb вы можете контролировать, что делать с сигналом SIGABRT.

Например, , запустите вашу программу с помощью: valgrind --vgdb-stop-at = запуск your_program

В другом окне запустите gdb: (gdb) обрабатывать SIGABRT nostop print nopass (gdb) target remote | vgdb (gdb) продолжить

См. http://www.valgrind.org/docs/manual/manual-core-adv.html#manual -core-adv.gdbserver для получения дополнительной информации.

...