2

pdb を使用して Python コードをデバッグしようとしています。c を呼び出す変数があり、c を押してこの変数を出力すると、pdb が混乱し、次のブレークポイントまでデバッグを続行します。変数の名前を変更するのは非常に難しいので、どうすればこのような混乱を避けることができますか?

4

3 に答える 3

2

変数を出力するには、次を使用しますp

p c

変数の値を出力しますc

例えば:

>>> import pdb
>>> c = [1,2,3]
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) p c
[1, 2, 3]
于 2013-07-30T00:30:44.927 に答える
2

!プレフィックスを使用して、そのようなものを評価しないように pdb に指示できます。

 >>> !c
 ... <value of c>
于 2013-07-30T00:28:57.503 に答える
1

あなたの混乱は、PDB のさまざまなコマンドが何をするかについてです。MUDに少し似ていると思いますが、かなり頻繁に機能します。

pを使用して、変数の内容を出力します (またはppを使用して、きれいに出力します (またはキャラクターの基本的なニーズを処理します)):

(Pdb) p df
Empty DataFrame
Columns: [Dist, type, Count]
Index: []

whereまたはwと入力して、スタックのどこにいるかを確認します。

(Pdb) w
-> return df[df['type']=='dev'][['Dist','Count']].as_matrix()
  /home/user/core/ops.py(603)wrapper()
-> res = na_op(values, other)
> /home/user/core/ops.py(567)na_op()
-> raise TypeError("invalid type comparison")

あの小さな>矢印が見えますか?それが私たちがスタックにいるところです。

listまたはlを使用して見回します。

(Pdb) list
564               try:
565                   result = getattr(x, name)(y)
566                   if result is NotImplemented:
567  >>                     raise TypeError("invalid type comparison")
568               except (AttributeError):
569  ->                 result = op(x, y)
570   
571           return result
572   
573       def wrapper(self, other):
574           if isinstance(other, pd.Series):

スタック内を移動するには、MUD を続行し、上( u ) または( d ) を使用ます。

args ( a ) を使用して、現在の関数が呼び出された引数を調べます。

(Pdb) args
dat = array([], shape=(0, 3), dtype=float64)
dev_classes = {81, 82, 21, 22, 23, 24, 31}

スタック内の現在のポイントでコードを入力するには、interactを使用します。Ctrl+Dで PDB に戻ります。

于 2015-03-05T22:53:19.390 に答える