私はPyCharmのプロジェクトで作業しており、コードの特定の部分をデバッグする必要があります。ScapyモジュールブロックPyCharmデバッガー
デバッグしようとすると、デバッガはブレークポイントを停止せずに単に「スキップ」しました。 ウェブで役に立たない試しが多かったので、私はScapyモジュールをインポートするとデバッガが動作せず、Scapyがインポートされていないときはすべて正常に動作することがわかりました。
Btw - 私はUbuntu OSで作業しています。
私はPyCharmのプロジェクトで作業しており、コードの特定の部分をデバッグする必要があります。ScapyモジュールブロックPyCharmデバッガー
デバッグしようとすると、デバッガはブレークポイントを停止せずに単に「スキップ」しました。 ウェブで役に立たない試しが多かったので、私はScapyモジュールをインポートするとデバッガが動作せず、Scapyがインポートされていないときはすべて正常に動作することがわかりました。
Btw - 私はUbuntu OSで作業しています。
自分自身でこの問題に遭遇しました。それは非常に迷惑です。 多くの場合のデバッグの後、答えになった。
scapyがすべてをグローバル名前空間にインポートする方法のようですが、これはPyCharm(名前の衝突、たぶん?)を破るようです。ところで
、これはscapyがロードされると、すべてが、10月18日からscapyのv2.3.3に2016年
を適用し、それが最終的にscapy/all.py
で行を打つ:
from scapy.layers.all import *
これはscapy/layers/all.py
をロード負荷はscapy/config.py
です。この最後のファイルは、Conf.load_layers[]
をモジュールリスト(scapy/layers
)に初期化します。
scapy/layers/all.py
このリストをループし、各モジュールに_import_star()
を呼び出します。
scapy/layers/x509.py
がロードされた後、PyCharmのすべてのブレークポイントが機能しなくなります。
私はあなたがX509を行うには何も使用しない場合は(1)、あなたは、単に割り当てられたリストからこのモジュールを削除することができ、あなたのためFOURソリューションをした、あなたが一番好きなものを選択...
Conf.load_layers[]
にscapy/config.py
(私のコピーconfig.py
の383行)。警告:これは本当のハックです - あなたのための他の方法がない限り、やめてください。
あなたは一時的にデバッグする必要がある場合は、このサンプルコードを使用することができます。
from scapy import config
config.Conf.load_layers.remove("x509")
from scapy.all import *
(2)の問題は、シンボルがグローバル名前空間にインポートされた状態です。これはクラスにとっては問題ありませんが、定数には悪いです。 _import_star()
にはシンボルの名前をチェックするコードがあり、_
(つまり「プライベート」の名前)で始まる場合はシンボルをグローバル名前空間にロードしません。この関数を変更して、x509
モジュールを特別に扱うには、X509_
という名前で始まらない名前を無視します。うまくいけば、これはx509
で定義されたクラスをインポートし、定数はインポートしません。ここではサンプルパッチです:
*** layers/all.py 2017-03-31 12:44:00.673248054 +0100
--- layers/all.py 2017-03-31 12:44:00.673248054 +0100
***************
*** 21,26 ****
--- 21,32 ----
for name in mod.__dict__['__all__']:
__all__.append(name)
globals()[name] = mod.__dict__[name]
+ elif m == "x509":
+ # import but rename as we go ...
+ for name, sym in mod.__dict__.iteritems():
+ if name[0] != '_' and name[:5] != "X509_":
+ __all__.append("_x509_" + name)
+ globals()["_x509_" + name] = sym
else:
# import all the non-private symbols
for name, sym in mod.__dict__.iteritems():
警告:これはREALハックです - あなたのための前方他の方法がない場合を除き、それをやって避けてください。
(3)これはソリューション(2)のバリエーションであり、REAL HACK(など)も同様です。 scapy/layers/x509.py
を編集し、すべての定数の前に_
を追加することができます。たとえば、default_directoryName
のすべてのインスタンスを_default_directoryName
に変更する必要があります。変更が必要な以下の定数が見つかりました:default_directoryName
、reasons_mapping
、cRL_reasons
、ext_mapping
、default_issuer
、default_subject
、attrName_mapping
およびattrName_specials
これは、私がscapy git repoで見つけたx509.py
に適用された修正と一致するので、いいです...
(4)次のバージョンのscapyに更新するだけです。私はこれがv2.3.4かv2.4になるかどうかはわかりませんが、(まだ書いている時点で)次のバージョンはまだリリースされていません。したがって、このリリース(新しいリリースの欠如)は続行されますが、最新の開発バージョン(2017年2月8日にこの問題を既に解決しています)に更新することができます。私は(むしろ、システムのPythonパッケージの場所に比べて)私のホームディレクトリの下にインストールscapyを使用するので、私は次のようでした:
pip uninstall scapy
git clone https://github.com/secdev/scapy /tmp/scapy
cd /tmp/scapy
python setup.py install --user
cd -
rm -rf /tmp/scapy
幸運!
評判ポイントの不足のためにSpiceislandの回答にコメントすることはできませんが、現在のバージョンのscapy 2.3.3.dev532では、Spiceislandがx509で指摘したtlsレイヤーと同じ問題が発生します。したがって、すべての回避策および修正は、tlsモジュールに応じて適用する必要があります。 load_layersリストからscapy/config.py削除「TLS」要素で
(つまり、2.3でライン434です:
ので、最も簡単迅速かつ汚い修正(とあなたがそれ以降TLSを使用することはできません) scapyの.3.dev532版)
これは質問への答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-代わりに)。 - [レビューの投稿](レビュー/低品質の投稿/ 16895402) – mbelsky
ご意見ありがとうございます。私は解決策を明確にする必要がない簡単な解決策で更新しました。 –
あなたはこれを試していました。この問題のためにバグを提出していますhttp://stackoverflow.com/questions/21788939/how-to-use-pycharm- –
私はこの動作を2番目にすることができます。幸運にも、私はこのモジュールのまわりで多くデバッグする必要はありません – portforwardpodcast