如何创建LLDB脚本以忽略SIGSEGV和SIGBUS

问题描述 投票:1回答:2

我经常在lldb中运行matlab来调试一些共享库,并希望创建一个lldb脚本,而不是键入以下两行。

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

我可以在〜/ .lldb / ignore_sigs创建一个文件,但我不知道该放入该文件中的内容。

matlab lldb
2个回答
0
投票

“进程句柄”的工作方式,你必须有一个运行的进程来附加信号行为;它不符合目标。因此,一旦进行了处理,您将需要执行此操作。最简单的方法是在.lldbinit文件中的main上设置断点,并将命令添加到该断点:

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

在.lldbinit文件中设置的断点将由所有lldb调试会话继承。如果您只想将它​​应用于您的matlab调试会话,您可以创建一个Python命令来检查目标可执行文件的名称,如果它是matlab则只执行process handle,然后运行进程句柄命令。然后,您可以从断点调用该Python命令,如上所示。


0
投票

我最终在〜/ .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
© www.soinside.com 2019 - 2024. All rights reserved.