2016-09-07 3 views
8

Ich Debuggen eines Python (3.5) Programm mit PyCharm (PyCharm Community Edition 2016.2.2 ; Build #PC-162.1812.1, built on August 16, 2016 ; JRE: 1.8.0_76-release-b216 x86 ; JVM: OpenJDK Server VM by JetBrains s.r.o) unter Windows 10.Debugger Timeout auf "Daten sammeln ..."

Das Problem: Wenn an einigen Haltepunkten gestoppt, ist der Debugger-Fenster fest bei "Daten sammeln", was schließlich zu einem Timeout führt. (mit Bildvariablen können nicht angezeigt werden)

Die anzuzeigenden Daten sind weder besonders, noch besonders groß. Es ist irgendwie für Pycharm verfügbar, da ein bedingter Haltepunkt bei einigen Werten der genannten Daten gut funktioniert (das Programm bricht) - es sieht so aus, als ob der Prozess, um es nur zur Anzeige zu sammeln (im Gegensatz zu Betriebszwecken), fehlschlägt.

Wenn ich in eine Funktion um den Ort gehe ich habe meinen Haltepunkt, werden seine Daten korrekt angezeigt. Wenn ich den Stapel hochgehe (zu der aufrufenden Funktion, der, von der ich heruntergegangen bin und wo ich ursprünglich den Haltepunkt haben wollte) - stehe ich wieder bei dem "Sammeln von Daten" Timeout fest.

Es gab zahlreiche Probleme mit dem gleichen Punkt seit mindestens 2005 angesprochen. Einige wurden behoben, andere nicht. Die Updates waren normalerweise Updates auf die neueste Version (die ich habe).

Gibt es eine allgemeine Richtung, in die ich gehen kann, um diese Problemfamilie zu beheben oder zu umgehen?


EDIT: ein Jahr später das Problem ist immer noch da, und es gibt immer noch keine Reaktion von dem Devs/Support nach dem Bug wurde angehoben.

+1

Ich bin genau das gleiche Problem. Haben Sie eine Lösung oder zumindest eine Erklärung gefunden? – Josh

+4

Leider nicht. Ich öffnete ein Ticket mit den Entwicklern, aber es gab keine Reaktion (das gleiche für ein anderes Ticket für ein anderes Problem). Während das Produkt großartig ist, ist die Unterstützung nicht vorhanden. – WoJ

+1

Ich bin LSTM Netzwerke in Keras und ich bekomme diesen Unsinn, wenn ich versuche, "Model.Predict" von der Debugger-Konsole. Es ist nicht passiert, als ich dasselbe mit Feedforward-Netzwerken gemacht habe. Der Code läuft eigentlich gut, wenn er nicht im Debugger/Konsole ist. Seltsam und nervig. – Josh

Antwort

1

Ich denke, dass dies durch einige Klassen verursacht wird, die eine Standardmethode __str __() haben, die zu ausführlich ist. Pycharm ruft diese Methode auf, um die lokalen Variablen anzuzeigen, wenn ein Haltepunkt erreicht wird, und sie bleibt beim Laden der Zeichenfolge hängen. Ein Trick, den ich benutze, um dies zu überwinden, besteht darin, die Klasse, die den Fehler verursacht, manuell zu bearbeiten und die __str __() -Methode durch etwas weniger Ausführliches zu ersetzen.

Als Beispiel passiert es, für pytorch _TensorBase Klasse (und alle Klassen tensor erstreckt it), und kann durch Bearbeiten der pytorch Quelle Fackel/tensor.py, die Änderung der __str __() Methode, wie gelöst werden:

def __str__(self): 
     # All strings are unicode in Python 3, while we have to encode unicode 
     # strings in Python2. If we can't, let python decide the best 
     # characters to replace unicode characters with. 
     return str() + ' Use .numpy() to print' 
     #if sys.version_info > (3,): 
     # return _tensor_str._str(self) 
     #else: 
     # if hasattr(sys.stdout, 'encoding'): 
     #  return _tensor_str._str(self).encode(
     #   sys.stdout.encoding or 'UTF-8', 'replace') 
     # else: 
     #  return _tensor_str._str(self).encode('UTF-8', 'replace') 

Weit vom Optimum, aber kommt in die Hand.

+0

Das ist eine gute Information, aber in meinem Fall ist es mein eigener Code, der hängt (auch ohne Klassen). Dies passiert meistens beim Debuggen von Multiprozessprogrammen. – WoJ