Nachdem ich lange Zeit mit diesem Problem zu kämpfen hatte, habe ich endlich eine Antwort gefunden, mit der Hilfe von Heron-Entwicklern (Hut ab vor ihnen). Die Antwort ist Remote Debugging jvm Prozesse.
Ein Abschnitt zur Fehlerbehebung (siehe Debugging Java-Topologien bei this page) wurde Heron Dokumentation hinzugefügt, die die erforderlichen Anweisungen für die Remote-Debugging Reiher gibt. Es ist gut, aber nicht das, was ich brauchte, denn es ist nur für das Debuggen von Instanzen (Schrauben/Tüllen ...). Aber ich brauchte, um Debug-Kernteile wie Scheduler, Werfer usw.
Um eine volle Remote-Debugging für Reiher ermöglichen sollten Sie in zweiter Linie zum execute.py (hinzufügen können bei Reiher/Tools gefunden werden/cli/src/python) Datei:
java_opts = ['-D' + opt for opt in java_defines]
//add this line here
java_opts.append('-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005')
Adresse: der Hafen, die Sie in Ihrem IDE konfiguriert haben.
suspend: y bedeutet, dass die Ausführung angehalten wird, bis der Client (Debugger oder IDE) eine Verbindung zum Server herstellt (jvm-Prozess).
Sie finden Anweisungen zum Festlegen von Remote Debugging in Intellij in this link.
Wichtig: Vergessen Sie nicht, die Quell- und Installationspakete neu zu kompilieren. Compilieren und installieren Reiher
bazel build --config=ubuntu heron/...
bazel run --config=ubuntu -- scripts/packages:heron-client-install.sh --user
bazel run --config=ubuntu -- scripts/packages:heron-api-install.sh --user --maven
Jetzt ist Ihre Checkpoints setzen, wohin Sie Ihr topologiy von Terminal wollen und senden und dann das Debuggen in IDE starten und es wird Sie zu den Checkpoints nehmen. Denken Sie daran, Checkpoints zum Ausführungspfad hinzuzufügen, SubmitterMain oder SchedulerMain können gute Kandidaten sein.