Débugger sur Duniter-v2s

En regardant le code je ne vois pas d’où ça peut venir.

J’ai essayé de mettre des logs dans le runtime (il y a une fonction substrate pour ça) mais il faut trouver la bonne commande pour récupérer le log (normalement c’est facile mais en mode test le -- --nocapture ne suffit pas).

Par rapport au débug par print, je pense qu’on ne sait pas utiliser les “bons outils”, c’est-à-dire un débugger comme le fait @cgeek, et que ça pourrait aider pour ce genre de cas.

La différence de comportement entre le test unitaire et test d’intégration me chagrine un peu :smiley:

J’utilisais le débuggeur intégré de VSCode mais entre VSCodium et les différentes extensions Rust qui ne marchent jamais complètement, ça ne marche plus. Et puis dans le test d’intégration il faut débugger du WASM donc encore un outil différent.

Je voulais juste afficher la payload juste avant signature pour comparer.

Je crois que ce que fait Cedric est d’utiliser le runtime natif plutôt que wasm pour pouvoir débugger dans CLion. Je vais ajouter ce point à l’ODJ de la prochaine visio dev pour qu’il nous montre comment ça marche.

1 Like

Je peux vous le dire tout de suite si ça peut aider :

  1. Télécharger et installer CLion
  2. Aller dans le menu Paramètres de CLion > Plugins > Markplace > Rust > Install
  3. Aller dans le menu Run > Edit Configurations … > Bouton “+” > Cargo

image

  1. Laisser les valeurs par défaut, sauf dans “Command” si vous souhaitez personnaliser la commande appelée, par exemple pour rajouter --dev --tmp :

  1. Cliquer sur “OK”
  2. Aller poser un point d’arrêt, par exemple dans le fichier node/src/chain_spec.rs:107 :

image

  1. Cliquer sur le bouton de Debug dans la barre supérieure :

Capture d’écran 2023-10-14 à 10.53.04

  1. Apprécier :

image

Si le Runtime est lancé en natif, vous pouvez également placer des points d’arrêt dedans. Pour les tests d’intégration c’est plus compliqué : je suppose qu’il faut lancer Duniter en mode Debug à part et modifier le code source du TI pour que celui-ci ne le lance plus et ne scrute pas ses logs. Mais je n’ai jamais essayé de le faire.

:information_source: Jetbrains a récemment sorti un IDE dédié à Rust : RustRover. Pour l’instant je ne l’utilise pas, j’ai eu quelques soucis de coloration syntaxique avec donc je ne vous le conseille pas pour l’instant. Mais vous pouvez l’essayer.

En tout cas, le Debug devrait aussi fonctionner dans VSCode, mais je ne suis pas familier de cet outil.

Bonus : lancer les tests end2end en Debug

Même chose que précédemment, mais la commande à rentrer est :

test -p duniter-end2end-tests --test cucumber_tests

Résultat avec un point d’arrêt dans cucumber_tests.rs :

image

En revanche, cela ne permet pas de mettre de point d’arrêt dans le Client (comme je le disais ci-dessus).

1 Like

Eh bien ça va devenir simple puisque j’en ai eu besoin pour déboguer les tests end2end, c’est trop long de comprendre ce qui se passe sans point d’arrêt.

J’ai ajouté une option --no-spawn sur ma branche, qui s’utilise comme suit :

cargo cucumber -i "identity*" --no-spawn

A côté il faut simplement avoir lancé un nœud en mode Debug, par exemple avec :

export DUNITER_GENESIS_DATA=./end2end-tests/cucumber-genesis/default.json
export DUNITER_GENESIS_CONFIG=./end2end-tests/cucumber-genesis/default.json
cargo cucumber-node
2 Likes