我有一些 python 代码,其中多次调用子进程(例如,subprocess.check_call())。它显然无法调试到子进程。
有什么方法(例如添加代码)可以做到这一点,或者我必须使用不同的调试器?
有没有办法在pycharm调试器中查看对象的方法函数?
该图像显示了一堆有用的属性,但它没有显示对象内部的任何方法。有办法看到他们吗?
如果我在 pdb 中输入 dir(object),则会列出所有内容。如何在 pycharm 中打开视觉等效项?
# process_with_huge_time_overhead()
list_a = [1,2,3]
print(list_a[3])
# process_with_huge_time_overhead()
new_data = [5,6,7]
list_a += new_data
Run Code Online (Sandbox Code Playgroud)
到达 ipdb 中的这一行(通过调用python -m ipdb script.py)后,抛出异常:IndexError

如何继续调试和跳转而不经历再次到达这一点的开销?
如果我跳到第62行,用n命令执行下一行,是不行的。everyn只是继续退出程序。
我使用pdb该函数来调试包含硬编码断点的 Python 2.7 脚本pdb.set_trace()。当我想运行脚本而不在断点处停止时,我必须注释掉所有行pdg.set_trace(),然后当我想在断点处停止时,我必须删除注释,这是非常低效的。有没有办法(例如命令行标志)来执行 python 脚本,忽略所有硬编码断点。例如,许多像 PyCharm 这样的 IDE 都有忽略断点的运行模式和在断点处停止的调试模式。我可以从命令行做类似的事情吗?
我在 Docker 中有一个 Django 服务器,并且希望能够远程调试我的脚本。箭头键不起作用。我越来越
(Pdb) ^[[A
Run Code Online (Sandbox Code Playgroud)
而不是有用的东西。我只是在 Ubuntu 上使用普通终端。没有 IDE 或任何奇特的东西。
正如这里所述,我重写了我的 docker-compose 并且它可以很好地使用此行:
__import__("remote_pdb").set_trace(host='0.0.0.0', port=4444)
Run Code Online (Sandbox Code Playgroud)
通过 telnet,我可以使用pdb 的大多数telnet 0.0.0.0 4444功能:
不起作用的是箭头键。有人也遇到了这个问题,我安装了readline,因为这个人也遇到了同样的问题:Python 交互模式历史记录和箭头键
dnf install ncurses-devel
pip3 install readline
Run Code Online (Sandbox Code Playgroud)
没有变化。(安装有效。我可以导入readline)。我假设问题可能来自 telnet。所以我正在考虑切换到ssh -t。
但现在我应该登录:
ssh -t 0.0.0.0 -P 4444
qohelet@0.0.0.0's password:
Run Code Online (Sandbox Code Playgroud)
没有密码。这只是一个 Docker。我也不知道用户名。
我一直在寻找,2017 年刚刚打来电话。我应该使用gnureadline。没有不同:
(Pdb) import gnureadline
(Pdb) ^[[A
Run Code Online (Sandbox Code Playgroud)
我现在被困住了。
我有一个 asyncio 应用程序,其中发生了一些异常。
让我们以这个小脚本为例:
import asyncio
async def coro1():
for a in range(1, -1, -1):
await asyncio.sleep(1)
print("coro1", a)
c = 1/a # ### !!!Will raise exception when a is 0!!!!
async def coro2():
for n in range(6):
print("------- coro2", n)
await asyncio.sleep(0.5)
async def main():
coros = [coro1(), coro2()]
completed, pending = await asyncio.wait(coros)
print("comp", completed)
print("pend", pending)
event_loop = asyncio.get_event_loop()
event_loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)
如果我对单线程非异步程序遇到类似的问题,我就会这样做
python -m pydb scriptname
Run Code Online (Sandbox Code Playgroud)
输入c并在代码中以 pydb 结束,这引发了异常,现在我可以查看和显示变量,我可以看到例如,那a是 0
我在我的 asyncio 应用程序中尝试了同样的操作,
我仅在 …
短的:
我一直在尝试调试ModuleNotFoundError我的本地存储库克隆之一中发生的问题。
更多详情:
我有同一个存储库的两个克隆。目前两者都已签出主分支。我想运行一个 Python 脚本,它导入各种模块,导入其他模块等。在第一个存储库克隆中,我得到ModuleNotFoundError: No module named 'TheModuleInQuestion'. 在第二个克隆中,脚本成功导入了它需要的所有内容并且运行时没有错误 - 尽管 sys.path 不包含特定于存储库的文件夹名称,并且尽管可能导入的所有文件也存在于第一个存储库中。
我想通过观察导入过程、搜索文件夹的顺序以及第二个存储库中导入模块的路径来调试它,最好使用 pdb。我在线查看了 pdb 用户指南,但没有发现与此特定用例相关的内容。我该怎么做呢?
更多信息
我的所有存储库克隆都位于 ~/git 的子文件夹中(或者,因为我在 Windows 10 上使用 Git Bash,所以位于 C:\users\myusername\git)
我使用的是 Python 3.6.5 32 位。这不是最新版本,它是公司出于与某些软件包或其他软件包的兼容性原因而指定的版本。
>>> import sys
>>> sys.path
['', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'c:\\users\\myusername\\downloads\\pyopenssl-master\\src']
Run Code Online (Sandbox Code Playgroud)
得到后
ModuleNotFoundError: No module named 'TheModuleInQuestion'
Run Code Online (Sandbox Code Playgroud)
我已在我的存储库克隆中搜索名称以“TheModuleInQuestion”开头的文件。其中没有“The ModuleInQuestion.py”。各种文件夹包含:
我正在使用PDB来调试python代码,我想知道有没有办法将整个调试过程中终端上出现的所有信息保存到文件中?复制粘贴在这里不现实。
如果这个问题在 上不合适,请帮助我编辑标签或将这个问题移动到更合适的位置stackoverflow。
我想我需要编写一个脚本来跟踪终端上从调试过程的开始到结束的信息。
任何建议表示赞赏。
每当我尝试在 ipython 单元中运行该程序时,都会出现一个奇怪的错误。
test_pts = sorted_points
new_segments = []
import pdb; pdb.set_trace()
for i in range(0, len(test_pts)-1):
x1 = test_pts[i][0]; y1 = test_pts[i][1]; x2 = test_pts[i][2]; y2 = test_pts[i][3]; angle1 = test_pts[i][4]
print(x1, y1, x2, y2, angle1)
for j in range(i + 1, len(test_pts)):
n_x1 = test_pts[j][0]; n_y1 = test_pts[j][1]; n_x2 = test_pts[j][2]; n_y2 = test_pts[j][3]; angle2 = test_pts[j][4]
if (isclose(angle1, angle2, rel_tol = 1)) and (isclose(x1, x2, rel_tol = 1) and (isclose(y1, y1, rel_tol = 1))):
print(n_x1, n_y1, n_x2, …Run Code Online (Sandbox Code Playgroud) 我正在使用多线程代码,并且 PDB 不会在手动设置断点处停止:
(pdb) b filename:lineno
(pdb) c # Runs without stopping
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?
pdb ×10
python ×8
debugging ×3
pycharm ×2
command-line ×1
docker ×1
ipdb ×1
ipython ×1
python-2.7 ×1
python-3.7 ×1
python-3.x ×1
subprocess ×1
windows ×1