Как создать скрипт LLDB, чтобы игнорировать SIGSEGV и SIGBUS - PullRequest
0 голосов
/ 18 сентября 2018

Я часто запускаю matlab в lldb для отладки некоторых общих библиотек и хотел бы создать скрипт lldb, вместо того, чтобы набирать следующие две строки.

process handle --pass true --stop false --notify true SIGSEGV process handle --pass true --stop false --notify true SIGBUS

Я мог бы создатьфайл в ~ / .lldb / ignore_sigs, но я не уверен, что поместить в этот файл.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Я закончил тем, что создал файл в ~ / .lldb / ignoreSigs.py

со следующим содержанием

import lldb

def ignoreSigs(debugger, command, result, dict):
    debugger.HandleCommand("process handle --pass true --stop false --notify true SIGSEGV")
    debugger.HandleCommand("process handle --pass true --stop false --notify true SIGBUS")

def __lldb_init_module (debugger, dict):
  debugger.HandleCommand('command script add -f ignoreSigs.ignoreSigs ignoreSigs')

Затем я добавил следующую строку в ~ / .lldbinit

comma script import ~/.lldb/ignoreSigs.py

После запуска Matlab я могу отключить сигналы через

matlab -Dlldb
run 
#Wait for first signal to occur.
ignoreSigs
0 голосов
/ 18 сентября 2018

Для работы дескриптора процесса у вас должен быть запущенный процесс, к которому нужно привязать поведение сигнала; это не придерживается цели. Так что вам нужно будет сделать это, как только у вас есть процесс. Самый простой способ сделать это - установить точку останова на main в вашем файле .lldbinit и добавить команды к этой точке останова:

break set -n main -C "process handle..." -C "process handle..."

Точки останова, установленные в файле .lldbinit, наследуются всеми сеансами отладки lldb. Если вы хотите, чтобы это применялось только к вашим сеансам отладки matlab, вы можете создать команду Python, которая проверяет имя вашего целевого исполняемого файла и делает process handle, только если это matlab, а затем запускает команды дескриптора процесса. Затем вы можете вызвать эту команду Python с точки останова, как показано выше.

...