gpt4 book ai didi

python - 有没有办法在 Python 调试器中搜索代码?

转载 作者:行者123 更新时间:2023-12-01 09:12:09 26 4
gpt4 key购买 nike

简单的问题,但我找不到答案。

在 Perl 调试器中,可以使用“/string”来搜索代码,就像键入/后跟要搜索的字符串一样。

这是一个简单的 Perl 调试 session 示例,我在其中查找单词“init”来定位子例程 initFromCfgFile。我在使用“/”两次后在第 93 行找到它:

% perl -d padmin.pl

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(padmin.pl:18): my $ACTION_STOP = 'stop';
DB<1> /init
59: initFromCfgFile();

DB<2> /
93: sub initFromCfgFile {


有没有办法用 Python 调试器做同样的事情?

最佳答案

您可以将 pdb.Pdb 子类化,它是 cmd.Cmd 的子类,使用 do_find 方法来实现 find 命令(以及实现 f 命令别名的 do_f 属性):

import pdb
import linecache

class fdb(pdb.Pdb):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.find = None

def do_find(self, arg):
if arg:
self.find = arg
self.last_lineno = 0
elif not self.find:
self.error('A search string must be specified.')
return
filename = self.curframe.f_code.co_filename
for lineno, line in enumerate(linecache.getlines(filename, self.curframe.f_globals), 1):
if lineno > self.last_lineno and self.find in line:
self._print_lines([line], lineno)
self.last_lineno = lineno
break
else:
self.error(f'No {"more " if self.last_lineno else ""}matching line found.')
do_f = do_find

fdb().set_trace()

示例输入和输出:

--Return--
> test.py(26)<module>()->None
-> fdb().set_trace()
(Pdb) find
*** A search string must be specified.
(Pdb) find foobar
*** No matching line found.
(Pdb) find error
14 self.error('A search string must be specified.')
(Pdb) f
23 self.error(f'No {"more " if self.last_lineno else ""}matching line found.')
(Pdb) f
*** No more matching line found.
(Pdb)

演示:https://repl.it/@blhsing/PureHarmfulApplicationframework

关于python - 有没有办法在 Python 调试器中搜索代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59417054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com