lldb неправильно пересылает `siginfo_t` в подключенный обработчик сигналов процесса - PullRequest
0 голосов
/ 05 декабря 2018

Я ранее задал этот вопрос и обнаружил, что lldb не будет передавать данные из структуры siginfo_t из исходного сигнала;все равно 0, кроме номера сигнала.Сигналы и данные в siginfo_t работают должным образом, когда программа не отлаживается.

Я использую субкоманду process handle в lldb, чтобы гарантировать, что passthough включен для SIGTERM, но, похоже, это не такработать (или, по крайней мере, не так, как я ожидаю).Я не знаю, относится ли это ко всем сигналам, но меня особенно интересует SIGTERM.

Это ошибка в lldb?Есть ли способ контролировать это поведение? Я ничего не вижу в справке.

Я нахожусь на macOS 10.14.1 (Mojave) и Xcode 10 (lldb-1000.11.37.1), если это имеет значение.

1 Ответ

0 голосов
/ 06 декабря 2018

lldb не может напрямую вызвать ваш обработчик сигнала.На MacOS не существует способа «signal.h», чтобы один процесс отправлял сигнал, включая целевой поток, и любую другую информацию другому процессу.Все варианты pthread_kill являются только локальными процессами.

Вместо этого отладчик перехватывает сигнал до его фактической доставки, получая исключение Маха EXC_SOFTWARE / EXC_SOFT_SIGNAL.Затем при возобновлении он сообщает ядру распространять сигнал с помощью системной утилиты ptrace - используя «PT_THUPDATE».Это определение находится в usr / include / sys / ptrace.h.С PT_THUPDATE вы отправляете номер сигнала, и ядро ​​обрабатывает его, как если бы исходный сигнал был подавлен, а новый сигнал повышен.

Этот процесс с потерями.Первоначально lldb получает только номер сигнала и целевой поток, а не любую другую информацию.Кроме того, PT_THUPDATE API принимает только идентификатор потока и номер сигнала.Таким образом, у нас нет возможности пересылать больше информации, даже если бы она у нас была.

Ядро должно было бы хранить всю остальную информацию вокруг, и когда lldb перенаправляет сигнал, копирует его или предоставляет API для lldb для выборкии отправьте эту информацию вместе с сигналом.

...