标签: pdb

在击键时插入(mac)vim中的代码行,用于pdb

我正在寻找用leaderpMacvim中的键击插入一行代码的方法

我想插入以下代码行:

import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

可能不是python土地中前所未闻的代码行

python vim macvim pdb

11
推荐指数
3
解决办法
1657
查看次数

PDB:如何检查嵌套堆栈帧中函数的局部变量?

语境:

我正在通过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()函数的局部变量?

换句话说,我如何检查嵌套在调用堆栈中的函数的局部变量?

重要说明:我不要continuesteprun()检查局部变量.我想检查(从我当前的,暂停的角度来看)run()当前嵌套在调用堆栈中的堆栈框架中的局部变量.

python debugging pdb

11
推荐指数
1
解决办法
3771
查看次数

python pdb自动漂亮打印

我发现自己经常在pdb中这样做:

import pprint
pprint.PrettyPrinter().pprint(variable_of_interest)
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法从pdb中打印变量?我正在寻找一些更容易输入的东西,理想情况下它总是在pdb中可用,所以我可以在我调试的任何时候使用它.

python pdb

11
推荐指数
2
解决办法
3559
查看次数

在哪里可以找到Qt的dll的pdb文件?

我正在调试Qt应用程序.我在哪里可以找到Qt的调试DLL?我在Windows上使用vs2010.它说它需要来自Qt的许多.dll的pdb文件.

c++ qt pdb

11
推荐指数
3
解决办法
9338
查看次数

用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)

可能有什么问题?

python debugging flask pdb

11
推荐指数
1
解决办法
7363
查看次数

如何在pdb中定义一个新函数

为什么我跑步时无法定义新功能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)

为什么是这样?

python python-2.7 pdb

11
推荐指数
2
解决办法
1370
查看次数

发生异常后,在最旧的堆栈帧中启动python调试器

我在--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)

python debugging ipython pdb ipdb

11
推荐指数
1
解决办法
477
查看次数

ipdb 和 pdb++ 之间的区别?

Python 有一个名为 pdb 的默认调试器,但社区创建了一些替代品。其中两个是ipdbpdb++。它们似乎迎合了相同的受众,它们都可以直接在 CLI 上运行,并提供一些细节,例如彩色输出和制表符完成。

它们是否有不同的用途,或者它们只是具有相似功能的竞争调试器?我很难理解何时人们希望使用其中一种而不是另一种。甚至似乎有人同时使用两者

python debugging pdb ipdb

11
推荐指数
1
解决办法
3523
查看次数

有没有办法进入装饰函数,跳过装饰器代码

我有一个模块,用自定义装饰器装饰一些关键功能.

使用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到给定的装饰函数时跳过所有装饰器代码.

python decorator pdb

10
推荐指数
2
解决办法
2031
查看次数

如何在 Visual Studio Code IDE 的调试器中使用 pdb(Python 调试器)?

pdb之前一直用Python调试。最近,我开始使用 Visual Studio Code。

它在 Visual Studio Code 调试器中看起来,如果我设置 a breakpoint(),Visual Studio Code 将在左侧窗口的停止位置显示变量的值,我必须通过 GUI 栏来控制它。

因此,在"integratedTerminal"or中"externalTerminal",我无法通过此处显示的命令行进行控制,并且没有pdb提示弹出窗口。我觉得这让我感到惊讶,因为它劫持了纯 Python 的东西。

那么有没有办法同时拥有变量监视窗口和 pdb 提示控制呢?特别是在"integratedTerminal""externalTerminal".

以下是文件夹.vscode下的文件,

文件设置.json

{
    "python.pythonPath": "/Users/<USERNAME>/miniconda3/envs/<CONDA_ENV>/bin/python"
}
Run Code Online (Sandbox Code Playgroud)

文件启动.json

{
    "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)

python pdb visual-studio-code vscode-debugger

10
推荐指数
1
解决办法
1万
查看次数