标签: pdb

同时使用调试器和curses?

我正在调用python -m pdb myapp.py,当异常触发时,我通常会被抛回到pdb解释器来调查问题.但是,在我调用curses.wrapper()并进入curses模式后抛出此异常,导致pdb解释器无效.我该如何解决这个问题?

python curses interpreter exception pdb

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

我可以在AssertionError上强制调试python吗?

假设我有一个python程序,其中assert用于定义事物应该是什么,并且我想用read-eval-loop捕获异常而不是AssertionError抛出.

当然,我可以

if (reality!=expectation):
    print("assertion failed");
    import pdb; pdb.set_trace();
Run Code Online (Sandbox Code Playgroud)

但是在代码中这比普通的更难看assert(reality==expectation).

我本可以在顶层pdb.set_trace()打电话except:,但后来我失去了失败的所有背景,对吧?(我的意思是,堆栈跟踪可以从异常对象中恢复,但不能从参数值中恢复,等等)

有没有像--magic命令行标志可以将python3解释器变成我需要的东西?

python assert python-3.x pdb

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

PDB.run - 重新启动pdb会话

我对python和pdb比较新,但我对gdb有很多经验.

我的问题是,如果我在某些时候在我的代码中设置了一些断点,我会想要改变一些东西并重新运行我的调试会话,保留这些断点.但是,在我的pdb会话中输入"run"会导致我的会话以以下输出终止

(Pdb) run
  Traceback (most recent call last):
  File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
    exec code in run_globals
  File "/usr/lib64/python2.6/pdb.py", line 1319, in <module>
    pdb.main()
  File "/usr/lib64/python2.6/pdb.py", line 1312, in main
    pdb.interaction(None, t)
  File "/usr/lib64/python2.6/pdb.py", line 198, in interaction
    self.cmdloop()
  File "/usr/lib64/python2.6/cmd.py", line 142, in cmdloop
    stop = self.onecmd(line)
  File "/usr/lib64/python2.6/pdb.py", line 267, in onecmd
    return cmd.Cmd.onecmd(self, line)
  File "/usr/lib64/python2.6/cmd.py", line 219, in onecmd
    return func(arg)
  File "/usr/lib64/python2.6/pdb.py", line …
Run Code Online (Sandbox Code Playgroud)

python pdb

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

将Python的pdb作为脚本运行时,如何自动启动脚本?

如果我想运行一个脚本并且pdb捕获任何异常,我就这样调用它:

python -m pdb script.py
Run Code Online (Sandbox Code Playgroud)

要么:

pdb script.py
Run Code Online (Sandbox Code Playgroud)

问题是它立即在调试提示符处停止:

> /home/coiax/Junkyard/script.py(1)<module>()
-> import sys
(Pdb) 
Run Code Online (Sandbox Code Playgroud)

我必须打字c或者continue让它去.有没有办法让它只是加载和启动脚本而不是最初询问我是否要设置任何断点或其他什么?

我发誓我已经阅读了pdb模块文档,并尝试制作一个包含的.pdbrc文件

c
Run Code Online (Sandbox Code Playgroud)

但它并没有自动启动.

python pdb

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

如何使用带有选项卡完成功能的python调试器运行pytest?

背景

我已经使用Plain调试了python脚本大约2年了from IPython import embed; embed(),并且运行良好。我只是将命令放在要检查的行上,并且在运行脚本时,我将拥有完整的IPython Shell,具有检查变量,定义函数等的能力。最重要的是,IPython Shell附带了变量名制表符。

现在,from IPython import embed; embed()我不再像总是用定义“暂停行” ,而是让我的python脚本在运行测试时遇到异常时暂停执行。

您如何pytest以这种方式运行,

  1. 引发异常时,它将启动python调试器
  2. 该调试器是否具有变量名的制表符补全

设定

  • Windows 10
  • Python 3.6

简单的失败测试

# test_somemodule.py
def test_me(some_variable):
    x = 1 + some_variable
    return x


test_me('I am a string')
Run Code Online (Sandbox Code Playgroud)

(不,您不必像这样为pytest编写测试,但是出于示例目的,这很好。)

无效的解决方案

1. pytest --pdb(未pdbpp安装)

pdb遇到错误时,这将打开基本外壳程序。但是它没有制表符补全。

-> x = 1 + some_variable
(Pdb) so[<tab_here_produces_tab>]
Run Code Online (Sandbox Code Playgroud)

2. pytest --pdb pdbpp安装)

pdbpp遇到错误时,这将打开基本外壳程序。但是没有制表符补全。

-> x = 1 …
Run Code Online (Sandbox Code Playgroud)

python debugging pytest pdb ipdb

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

如何配置uWSGI以便使用pdb进行调试(--hourour-stdin配置问题)

我希望能够pdb在uWSGI下调试Python(Django)应用程序,并且我基本上遇到了与此处描述相同的问题:

  ...
  File "/usr/lib/python2.7/bdb.py", line 49, in trace_dispatch
    return self.dispatch_line(frame)
  File "/usr/lib/python2.7/bdb.py", line 68, in dispatch_line
    if self.quitting: raise BdbQuit
BdbQuit
Run Code Online (Sandbox Code Playgroud)

不同的是,我有不同的uWSGI设置,好像我不能让uWSGIhonour-stdin作为从上面的问题接受的答案建议.

我的设置如下:

1)我有一个systemd进程在Emperor模式下启动uWSGI

[Unit]
Description=uWSGI Emperor service

[Service]
ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

2)/etc/uwsgi/emperor.ini看起来像这样:

[uwsgi]
emperor = /etc/uwsgi/sites
uid = www-data
gid = www-data
limit-as = 1024
logto = /tmp/uwsgi-emperor.log
# I've tried adding both honour-stdin 
# and daemons-honour-stdin here
honour-stdin = true …
Run Code Online (Sandbox Code Playgroud)

python linux debugging uwsgi pdb

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

如何在 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万
查看次数

Django Gunicorn调试

最初我有一个包含测试服务器的Django应用程序.为了调试这个设置,我可以import pdb; pdb.set_trace()在代码中的任何地方添加一个断点,将我引入Terminal中的交互式调试器(在命令行上).

最近我转向了gunicorn以获得一些优势.使用此Gunicorn设置时,如何获得类似的行为.我已经通过设置gunicorn设置尝试debug=Truedaemon=False,但它不工作.

有人有解决方案吗?

django debugging wsgi gunicorn pdb

9
推荐指数
1
解决办法
6987
查看次数

PostSharp之后pdb文件正在消失

我正在使用PostSharp版本2.1.6.4(也尝试了最新版本2.1.7.35),有时pdb文件丢失,并且有一个pssym文件.

<?xml version="1.0" encoding="utf-8"?>
<Symbols xmlns="http://schemas.postsharp.org/2.0/symbols">
  <Class Class="#1=T:[CrosscuttingLogging]CrosscuttingLogging.Attributes.LogMethodCallStatsAttribute" LimitedLicense="true" />
  <Class Class="#2=T:[RequestLimiter]RequestLimiter.RequestCounterAttribute" LimitedLicense="true" />
</Symbols>
Run Code Online (Sandbox Code Playgroud)

我在构建过程中运行procmon,据我所知,postsharp.srv.4.0-x86.exe进程将dll和pdb文件从obj\Debug文件夹移动到obj\Debug\Before-PostSharp文件夹,然后在文件夹中生成一个新的dll obj\Debug,但是没有生成新的pdb文件.

对于我的一些dll(看似随机)会发生这种情况并且似乎不可靠,因为在其他机器上所有pdb文件都是正确生成的.

c# msbuild postsharp pdb visual-studio-2015

9
推荐指数
2
解决办法
2625
查看次数

pdb 绕过错误/跳转失败:只能从“行”跟踪事件跳转

我正在尝试使用 pdb 调试 Python 程序。程序可能是这样的:

def main():
    a = 1
    print(b)
    c = 2
    d = 3
Run Code Online (Sandbox Code Playgroud)

显然,print(b) 是一个错字,应该是 print(a) 但这并不重要,我可以用文本编辑器修复它,但我想绕过这个错误并继续调试。

我试过跳转,比如跳转 4(假设“c=2”是第 4 行)但是我得到了错误“跳转失败:f_lineno 只能由行跟踪功能设置”,这意味着我需要在以下情况下提供行跟踪功能我在编程。

那么,有没有办法解决这个问题,或者在使用pdb时有没有其他方法可以绕过错误行?

python debugging pdb

9
推荐指数
2
解决办法
1069
查看次数