我正在寻找用leaderpMacvim中的键击插入一行代码的方法
我想插入以下代码行:
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
可能不是python土地中前所未闻的代码行
我正在通过PDB(Python调试器)运行一些python代码.当我设置并随后点击断点时,我可以使用以下方法检查局部变量:
(Pdb) locals()
Run Code Online (Sandbox Code Playgroud)
这打印出一个很好的名称,在我暂停的当前范围内的局部变量的值对.完善!
我还可以使用PDB where命令查看堆栈跟踪,结果如下所示:
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py(400)run()
-> exec cmd in globals, locals
<string>(1)<module>()
.../main.py(116)<module>()
-> run()
.../main.py(104)run()
-> res = quicksort(res)
> .../main.py(68)quicksort()
-> if len(v) <= 1:
Run Code Online (Sandbox Code Playgroud)
在这个示例输出中,我暂停了quicksort()函数调用的run()函数.
到现在为止还挺好.
如果我可以quicksort()通过调用来检查函数的局部变量,locals()我怎样才能类似地检查run()函数的局部变量?
换句话说,我如何检查嵌套在调用堆栈中的函数的局部变量?
重要说明:我不要想continue或step成run()检查局部变量.我想检查(从我当前的,暂停的角度来看)run()当前嵌套在调用堆栈中的堆栈框架中的局部变量.
我发现自己经常在pdb中这样做:
import pprint
pprint.PrettyPrinter().pprint(variable_of_interest)
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法从pdb中打印变量?我正在寻找一些更容易输入的东西,理想情况下它总是在pdb中可用,所以我可以在我调试的任何时候使用它.
我正在调试Qt应用程序.我在哪里可以找到Qt的调试DLL?我在Windows上使用vs2010.它说它需要来自Qt的许多.dll的pdb文件.
我正在尝试使用pdb来调试flask应用程序.设置断点很容易; 我只是b index在调用index()时使用中断或b 44在第44行设置断点.
断点适用于b 44主要的开始,但b index不起作用.在命令行中,打印"Index is called"以指示调用该方法,但它不会在pdb中停止.
@app.route('/', methods=['GET', 'POST'])
def index():
print "Index is called"
name = None
...
return render_template('index.html', form=form, name=name)
if __name__ == '__main__':
manager.run() # line 44
Run Code Online (Sandbox Code Playgroud)
可能有什么问题?
为什么我跑步时无法定义新功能pdb?
例如,使用myscript.py:
#!/gpfs0/export/opt/anaconda-2.3.0/bin/python
print "Hello World"
print "I see you"
Run Code Online (Sandbox Code Playgroud)
如果我运行python -m pdb myscript.py并尝试以交互方式定义新函数:
def foo():
Run Code Online (Sandbox Code Playgroud)
我收到错误:
*** SyntaxError: unexpected EOF while parsing (<stdin>, line 1)
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我在--pdbipython中使用该命令,因此当我调试代码并发生错误时,它会显示堆栈跟踪.很多这些错误来自于输入错误的numpy或pandas函数.堆栈跟踪从最新的帧开始,来自这些库的代码.up稍后重复5-10次命令我实际上可以看到我做错了什么,这将在90%的时间内立即显现(例如,使用列表而不是数组调用).
有没有办法指定调试器最初启动哪个堆栈帧?最旧的堆栈帧,或最初运行的python文件中的最新堆栈帧,或类似的.这对于调试来说会更有效率.
这是一个简单的例子
import pandas as pd
def test(df): # (A)
df[:,0] = 4 #Bad indexing on dataframe, will cause error
return df
df = test(pd.DataFrame(range(3))) # (B)
Run Code Online (Sandbox Code Playgroud)
为清楚起见,添加了回溯,(A),(B),(C)
In [6]: ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-66730543fac0> in <module>()
----> 1 import codecs, os;__pyfile = codecs.open('''/tmp/py29142W1d''', encoding='''utf-8''');__code = __pyfile.read().encode('''utf-8''');__pyfile.close();os.remove('''/tmp/py29142W1d''');exec(compile(__code, '''/test/stack_frames.py''', 'exec'));
/test/stack_frames.py in <module>()
6
7 if __name__ == '__main__':
(A)----> 8 df = test(pd.DataFrame(range(3)))
/test/stack_frames.py in test(df)
2
3 def test(df):
(B)----> 4 …Run Code Online (Sandbox Code Playgroud) 我有一个模块,用自定义装饰器装饰一些关键功能.
使用pdb调试这些函数通常有点痛苦,因为每次我进入一个装饰函数时,我首先必须逐步完成装饰器代码本身.
我当然可以将调试器设置为在我感兴趣的函数内断开,但作为关键函数,它们从很多地方被多次调用,因此我通常更喜欢在函数外部开始调试.
我试图用代码来说明它,但我不知道这是否有帮助:
def i_dont_care_about_this(fn):
@functiontools.wraps(fn)
def wrapper(*args, **kwargs):
return fn(*args, **kwargs)
return wrapper
@i_dont_care_about_this
def i_only_care_about_this():
# no use to set pdb here
def i_am_here():
import pdb; pdb.set_trace()
i_only_care_about_this()
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法让我i_only_care_about_this从中i_am_here走出来而不经过i_dont_care_about_this?
基本上我想在使用s到(s)tep到给定的装饰函数时跳过所有装饰器代码.
我pdb之前一直用Python调试。最近,我开始使用 Visual Studio Code。
它在 Visual Studio Code 调试器中看起来,如果我设置 a breakpoint(),Visual Studio Code 将在左侧窗口的停止位置显示变量的值,我必须通过 GUI 栏来控制它。
因此,在"integratedTerminal"or中"externalTerminal",我无法通过此处显示的命令行进行控制,并且没有pdb提示弹出窗口。我觉得这让我感到惊讶,因为它劫持了纯 Python 的东西。
那么有没有办法同时拥有变量监视窗口和 pdb 提示控制呢?特别是在"integratedTerminal"或"externalTerminal".
以下是文件夹.vscode下的文件,
{
"python.pythonPath": "/Users/<USERNAME>/miniconda3/envs/<CONDA_ENV>/bin/python"
}
Run Code Online (Sandbox Code Playgroud)
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Module",
"type": "python",
"python": "/Users/<USERNAME>/miniconda3/envs/<CONDA_ENV>/bin/python",
"request": "launch",
"program": "/Users/<USERNAME>/miniconda3/envs/<CONDA_ENV>/bin/<COMMAND>",
"console": "integratedTerminal",
"args": [
"hello-world"
],
"cwd": "${workspaceRoot}",
}
]
}
Run Code Online (Sandbox Code Playgroud)