我正在为Ida(在python中)编写一个利用Etcd远程密钥值存储系统的插件。我的问题是当我试图锁定服务器时
lock = etcd.Lock(self.client, 'ida_lock')
Should timeout after 30 seconds. Hopefully that is enough.
lock.acquire(blocking=True,lock_ttl=None,timeout=30)
if lock.is_acquired:
data,idc_file = self.get_idc_data()
if os.path.isfile('expendable.idc'):
self.client.write('/fREd/' + self.md5 + '/all/', idc_file, prevValue = open('expendable.idc','r').readlines())
else:
self.client.write('/fREd/' + self.md5 + '/all/', idc_file)
lock.release()
像这样,Ida冻结了,我想知道是否有人对这种情况发生的原因或如何解决它有任何见解。
因此,作为参考,通过键盘快捷键
调用包含此方法的方法idaapi.add_hotkey('Ctrl-.', self.push_data)
并且毫无疑问是导致问题的锁定。
查看python-etcd来源答案 0 :(得分:1)
目录/_locks/ida_lock
下已存在密钥。
列出/_locks/ida_lock
下的文件:
etcdctl ls /_locks/ida_lock
要从中拯救自己,请运行:
etcdctl rm /_locks/ida_lock --dir --recursive
为了避免这种情况,您可以在lock.release()
区块中运行finally
,就好像您没有发布一样,/_locks/ida_lock
下会有一个文件。
此外,您可以添加一些日志记录配置(您可以参考here)以在处理此类问题时进行更多挖掘。