我经常在lldb中运行matlab来调试一些共享库,并希望创建一个lldb脚本,而不是键入以下两行。
process handle --pass true --stop false --notify true SIGSEGV
process handle --pass true --stop false --notify true SIGBUS
我可以在〜/ .lldb / ignore_sigs创建一个文件,但我不知道该放入该文件中的内容。
“进程句柄”的工作方式,你必须有一个运行的进程来附加信号行为;它不符合目标。因此,一旦进行了处理,您将需要执行此操作。最简单的方法是在.lldbinit文件中的main上设置断点,并将命令添加到该断点:
break set -n main -C "process handle..." -C "process handle..."
在.lldbinit文件中设置的断点将由所有lldb调试会话继承。如果您只想将它应用于您的matlab调试会话,您可以创建一个Python命令来检查目标可执行文件的名称,如果它是matlab则只执行process handle
,然后运行进程句柄命令。然后,您可以从断点调用该Python命令,如上所示。
我最终在〜/ .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