【问题标题】:How to restart ipdb while in debugging?调试时如何重启ipdb?
【发布时间】:2020-07-02 17:42:27
【问题描述】:

我的主要目标是重新启动ipdb,它应该在代码的开头继续并在第一个断点处捕获。

# code.py

val = 10
print(f"Hello_World {val}")
__import__('ipdb').set_trace(context=5)
print("Goodbye_World")

运行:

$ ./code.py
Hello_World 10
> /home/alper/eBlocBroker/doo.py(4)<module>()
      1 val = 10
      2 print(f"Hello_World {val}")
      3 __import__('ipdb').set_trace(context=5)
----> 4 print("Goodbye_World")   // right away catched here 

ipdb>

[Q] 此时,我将代码设置 val 更新为 11。现在,我想重新启动 ipdb 会话(不关闭它),它应该被赶上同一个断点,可以吗?

  • 如果我以 python3 -m ipdb code.py 运行,它不会从断点开始,而是从文件顶部开始,这是我不想要的。

如果我输入:restart 我会收到以下错误:

Traceback (most recent call last):
  File "doo.py", line 4, in <module>
    print("Goodbye_World")
  File "doo.py", line 4, in <module>
    print("Goodbye_World")
  File "/usr/lib/python3.7/bdb.py", line 88, in trace_dispatch
    return self.dispatch_line(frame)
  File "/usr/lib/python3.7/bdb.py", line 112, in dispatch_line
    self.user_line(frame)
  File "/usr/lib/python3.7/pdb.py", line 259, in user_line
    self.interaction(frame, None)
  File "/home/alper/venv/lib/python3.7/site-packages/IPython/core/debugger.py", line 305, in interaction
    OldPdb.interaction(self, frame, traceback)
  File "/usr/lib/python3.7/pdb.py", line 350, in interaction
    self._cmdloop()
  File "/usr/lib/python3.7/pdb.py", line 319, in _cmdloop
    self.cmdloop()
  File "/home/alper/venv/lib/python3.7/site-packages/IPython/terminal/debugger.py", line 126, in cmdloop
    stop = self.onecmd(line)
  File "/usr/lib/python3.7/pdb.py", line 416, in onecmd
    return cmd.Cmd.onecmd(self, line)
  File "/usr/lib/python3.7/cmd.py", line 217, in onecmd
    return func(arg)
  File "/usr/lib/python3.7/pdb.py", line 1026, in do_run
    raise Restart
pdb.Restart

If you suspect this is an IPython 7.16.1 bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at ipython-dev@python.org

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    %config Application.verbose_crash=True

【问题讨论】:

    标签: python pdb ipdb


    【解决方案1】:
    • Ctrl-d Ctril-c 打破循环。
    • Ctrl-d 重启会话
    #!/bin/bash
    
    control_c()
    {
        printf goodbye
        # kill -SIGINT $(jobs -p)
        exit #$
    }
    
    trap control_c SIGINT
    
    while true
    do
        ./Driver.py
        # sleep 10 &
        wait
        printf "\n"
        # loop infinitely
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多