回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想从lldb(gdb)扩展python脚本向neovim实例发送命令。
虽然这在gdb中没有问题,但我在lldb中得到了一个python异常</p>
<p>最简单的例子:</p>
<pre><code>(gdb) source test.py #works
(lldb) command script import test.py #raises an exception
</code></pre>
<p>test.py</p>
<pre><code>import pynvim
pynvim.attach('socket', path='/tmp/nvimsocket')
</code></pre>
<p>例外情况:</p>
<pre><code>error: module importing failed: signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object
File "temp.py", line 1, in <module>
File "/opt/repos/nvim/test.py", line 5, in <module>
pynvim.attach('socket', path='/tmp/nvimsocket2')
File "/usr/lib/python3.8/site-packages/pynvim/__init__.py", line 122, in attach
return Nvim.from_session(session).with_decode(decode)
File "/usr/lib/python3.8/site-packages/pynvim/api/nvim.py", line 80, in from_session
channel_id, metadata = session.request(b'nvim_get_api_info')
File "/usr/lib/python3.8/site-packages/pynvim/msgpack_rpc/session.py", line 95, in request
v = self._blocking_request(method, args)
File "/usr/lib/python3.8/site-packages/pynvim/msgpack_rpc/session.py", line 174, in _blocking_request
self._async_session.run(self._enqueue_request,
File "/usr/lib/python3.8/site-packages/pynvim/msgpack_rpc/async_session.py", line 66, in run
self._msgpack_stream.run(self._on_message)
File "/usr/lib/python3.8/site-packages/pynvim/msgpack_rpc/msgpack_stream.py", line 43, in run
self.loop.run(self._on_data)
File "/usr/lib/python3.8/site-packages/pynvim/msgpack_rpc/event_loop/base.py", line 148, in run
signal.signal(signal.SIGINT, default_int_handler)
File "/usr/lib/python3.8/signal.py", line 47, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
</code></pre>
<p>这似乎是信号模块的一个问题,也会影响其他项目:
<a href="https://github.com/python/asyncio/issues/396" rel="nofollow noreferrer">https://github.com/python/asyncio/issues/396</a></p>
<p>可以调试在lldb内部的虚拟python环境中运行的python脚本吗</p>
<p>编辑:</p>
<p>如果我尝试导入pdb并使用</p>
<pre><code>pdb.set_trace()
</code></pre>
<p>(没有nvim内容)出现以下例外情况:</p>
<pre><code>error: module importing failed: Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/test/python_debug/test.py", line 8, in <module>
a()
File "/home/test/python_debug/test.py", line 5, in a
pdb.set_trace()
File "/usr/lib/python3.8/pdb.py", line 1609, in set_trace
pdb = Pdb()
File "/usr/lib/python3.8/pdb.py", line 158, in __init__
readline.set_completer_delims(' \t\n`@#$%^&*()=+[{]}\\|;:\'",<>?')
AttributeError: module 'lldb_editline' has no attribute 'set_completer_delims'
</code></pre>
<p>我从源代码构建了lldb,有两个标志:</p>
<pre><code>LLDB_ENABLE_LIBEDIT
LLDB_ENABLE_CURSES
</code></pre>
<p><a href="https://lldb.llvm.org/resources/build.html" rel="nofollow noreferrer">https://lldb.llvm.org/resources/build.html</a>
libedit已安装,如何验证它是否已激活?
是否有类似lldb的东西--构建标志</p>