smalictrace.py 文件源码

python
阅读 19 收藏 0 点赞 0 评论 0

项目:linux-pentest-util 作者: fikr4n 项目源码 文件源码
def do_search(self, query, event_flag):
        def get_icon(n):
            if n not in self.parser.members:  # no check for undeclared class
                icon = gtk.STOCK_DELETE
            elif '(' in n:
                icon = gtk.STOCK_EXECUTE
            elif ':' in n:
                icon = gtk.STOCK_SELECT_FONT
            else:
                icon = gtk.STOCK_FILE
            return icon

        def append_row(parent, names, depth, call_info):

            name = names[0]
            call_info_str = call_info.select_from_call_types(u'?????') \
                            .replace(u'??', u'?') \
                            .replace(u'??', u'?')
            it = self.store.append(parent, (
                name,  # class/method/field name
                get_icon(name),  # icon
                'b' if name in toplevel else '',
                    # bold (in root) or not
                call_info_str
                ))

            # Append children
            d = depth + 1
            if d >= self._max_tree_depth:
                self.store.append(it, (' ...maximum depth (%d) reached' %
                    self._max_tree_depth, gtk.STOCK_INFO, 'i',
                    call_info_str))
                return
            for caller, info in self.parser.callers.get(name, {}).items():
                if event_flag.is_set():  # stopped earlier
                    return
                if caller not in names:
                    names.appendleft(caller)
                    append_row(it, names, d, info)
                    names.popleft()
                else:
                    self.store.append(it, (' ...recursive ' + caller,
                        gtk.STOCK_INFO, 'i', call_info_str))

        with self.search_lock:
            gobject.idle_add(self.treeview.set_model, None)

            toplevel = set()
            self.store.clear()
            for k in self.parser.callers:
                if fnmatch.fnmatch(k, query):
                    toplevel.add(k)
            for i in toplevel:
                append_row(None, collections.deque((i,)), 0, CallInfo())

            # Finalization
            if not event_flag.is_set():
                event_flag.set()
                gobject.idle_add(self.treeview.set_model, self.store)
                gobject.idle_add(self.on_search_stop)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号