Python 在同一脚本上同时调试会话,该步骤同时进行

Python 在同一脚本上同时调试会话,该步骤同时进行,python,debugging,pycharm,python-3.4,Python,Debugging,Pycharm,Python 3.4,问题: 假设我有一个简单的脚本,如: print('hello') x = 7 + 2 x *= 4 s = set('abcdefgh') my_str = '' for i in s: my_str += i # Prints different str each time. print(my_str) 我需要同时运行两个调试会话: 然后,我需要调试器同时在两个调试会话上跳过并继续跳过,直到两个调试会话中相同的变量得到不同的值 即: 在第一次调试会话上,它转到 第2行 然

问题:
假设我有一个简单的脚本,如:

print('hello')
x = 7 + 2
x *= 4

s = set('abcdefgh')

my_str = ''
for i in s:
    my_str += i

# Prints different str each time.
print(my_str)
我需要同时运行两个调试会话:

然后,我需要调试器同时在两个调试会话上跳过并继续跳过,直到两个调试会话中相同的变量得到不同的值

即:

  • 第一次调试会话上,它转到 第2行

  • 然后,在第二次调试会话上进行操作,然后 也转到第2行

  • 然后在调试会话的第一个上进行操作,并转到第3行

  • 然后,在第二次调试会话中,转到第3行

  • 等等

在下面的代码中,我将在第11行检测相同变量的不同值。例如,变量
i
可以在第一个调试器会话中获取值
'c'
,而在第二个调试器会话中具有值
'a'

如何使调试器自动执行上述过程并在第11行停止


我为什么需要它:

如果我在上面的代码中使用了
sorted(s)
,它将始终返回相同的结果

for i in sorted(s):
    # This would always be the same now.
    my_str += i
在我的现实生活中,我忘记了使用
sorted()
,导致代码的行为应该是确定性的,而不是非确定性的。(所谓确定性,我指的是对给定输入总是给出相同输出的代码)

在上面的示例中(假设您有),不同的调试会话将导致不同的
pythonhasheed
s和(通常)不同顺序的集合、dict等。因此,
my_str
将(通常)在每次运行时获得不同的值

我需要能够检测变量是否得到不同的值


(注意:我的实际代码是+10k行代码。)

为什么不同时输入三行或四行代码?非确定性代码是非确定性的,你的问题对我来说没有任何意义。@ElliottFrisch同时运行多少次并不重要。我编辑了这个问题,以便更好地解释我所说的“确定性”是什么意思。如果它仍然没有意义(决定论部分或任何其他部分),请让我知道。我不会尝试通过同步调试会话来实现这一点。应该可以通过在代码的关键位置添加print语句来发现代码中的问题,以查看值与预期值不符的位置。您可以缩小范围,直到找到问题为止。@SimeonVisser我按照您描述的方式进行调试(发现了两个这样的错误),但是程序又大又复杂,需要很多时间。我希望有一种方法可以使用问题中描述的不同方法(可能通过使用pdb和自定义脚本实现)。