3

このサンプル スクリプトを ipdb でデバッグしようとすると、次のようになります。

n = 1
next = 1
print('end')

Python 変数が pdb コマンドを覆い隠しているため、3 行目を実行できません。

$ ipdb test.py
> /tmp/test.py(1)<module>()
----> 1 n = 1
      2 next = 1
      3 print('end')

ipdb> next
> /tmp/test.py(2)<module>()
      1 n = 1
----> 2 next = 1
      3 print('end')

ipdb> next
> /tmp/test.py(3)<module>()
      1 n = 1
      2 next = 1
----> 3 print('end')

ipdb> next
1
ipdb> n
1
ipdb> !n
1
ipdb> !next
1

両方のコマンド (n/next) が認識されなくなった場合、コードの実行をさらに進めるにはどうすればよいですか? (s/step も変数によって隠されていると仮定しましょう)。

私がこれまでに試したこと:

  • ipdb の代わりに ipdb3 を使用 - 同じ問題 (私の場合、ipdb が ipdb3 にリンクされているためかもしれません:))
  • pdb を使用 - 動作します! n/next コマンドは、python 変数を表示する代わりに次の行に移動します。ipdb の何が問題になっていますか?
  • !!n問題を軽減します - の ipdb バージョンを実行しnextます。私がalias n !!nそれを実行するために繰り返し使用することができればEnter、問題は解決するでしょう. ただし、エイリアスを実行する代わりにEnter変数を表示するだけです(これはに解決されるはずです)nn!!n

私は使用しています

  • マンジャロ Linux 16.10
  • Python 3.5.2 :: アナコンダ 4.2.0 (64 ビット)
  • ipdb (0.10.1)
  • ipython (5.1.0)
  • ipython-genutils (0.1.0)
  • ~/.pdbrc ファイルがありません

編集

この問題は次の方法で修正されました: https://github.com/ipython/ipython/pull/10050

4

1 に答える 1

2

2016 年 12 月 14 日の更新:

最後に、iPython チームはこの設計を取り消すことにしました。


あなたの問題の解決策は、!!ステートメントを使用して標準の動作を強制することです。

> /home/v-zit/test.py(1)<module>()
----> 1 n = 1
      2 next = 11
      3 print('end')

ipdb> n
> /home/v-zit/test.py(2)<module>()
      1 n = 1
----> 2 next = 11
      3 print('end')

ipdb> n
1
ipdb> !!n
> /home/v-zit/test.py(3)<module>()
      1 n = 1
      2 next = 11
----> 3 print('end')

ipdb> next
11
ipdb> !!next
end
--Return--
None
> /home/v-zit/test.py(3)<module>()
      1 n = 1
      2 next = 11
----> 3 print('end')

ipdb>

参照:

https://github.com/ipython/ipython/pull/9449

https://github.com/ipython/ipython/pull/10050

于 2016-10-24T19:15:42.213 に答える