Débogage des Workflows¶
Traduction assistée par IA - en savoir plus et suggérer des améliorations
Le débogage est une compétence essentielle qui peut vous faire gagner des heures de frustration et vous aider à devenir un·e développeur·se Nextflow plus efficace. Tout au long de votre carrière, en particulier lorsque vous débutez, vous rencontrerez des bugs lors de la construction et de la maintenance de vos workflows. L'apprentissage d'approches de débogage systématiques vous aidera à identifier et à résoudre les problèmes rapidement.
Objectifs d'apprentissage¶
Dans cette quête annexe, nous explorerons les techniques de débogage systématiques pour les workflows Nextflow :
- Débogage des erreurs de syntaxe : Utilisation efficace des fonctionnalités de l'IDE et des messages d'erreur de Nextflow
- Débogage des canaux : Diagnostic des problèmes de flux de données et de structure des canaux
- Débogage des processus : Investigation des échecs d'exécution et des problèmes de ressources
- Outils de débogage intégrés : Exploitation du mode preview, de l'exécution stub et des répertoires de travail de Nextflow
- Approches systématiques : Une méthodologie en quatre phases pour un débogage efficace
À la fin, vous disposerez d'une méthodologie de débogage robuste qui transforme les messages d'erreur frustrants en feuilles de route claires vers les solutions.
Prérequis¶
Avant d'entreprendre cette quête annexe, vous devez :
- Avoir terminé le tutoriel Hello Nextflow ou un cours équivalent pour débutants.
- Être à l'aise avec les concepts et mécanismes de base de Nextflow (processus, canaux, opérateurs)
Optionnel : Nous recommandons de terminer d'abord la quête annexe Fonctionnalités IDE pour le Développement Nextflow. Celle-ci couvre de manière exhaustive les fonctionnalités de l'IDE qui supportent le débogage (coloration syntaxique, détection d'erreurs, etc.), que nous utiliserons intensivement ici.
0. Commencer¶
Ouvrir l'espace de code de formation¶
Si vous ne l'avez pas encore fait, assurez-vous d'ouvrir l'environnement de formation comme décrit dans la Configuration de l'Environnement.
Se déplacer dans le répertoire du projet¶
Déplaçons-nous dans le répertoire où se trouvent les fichiers pour ce tutoriel.
Vous pouvez configurer VSCode pour se concentrer sur ce répertoire :
Examiner le matériel¶
Vous trouverez un ensemble d'exemples de workflows avec divers types de bugs que nous utiliserons pour la pratique :
Contenu du répertoire
.
├── bad_bash_var.nf
├── bad_channel_shape.nf
├── bad_channel_shape_viewed_debug.nf
├── bad_channel_shape_viewed.nf
├── bad_number_inputs.nf
├── badpractice_syntax.nf
├── bad_resources.nf
├── bad_syntax.nf
├── buggy_workflow.nf
├── data
│ ├── sample_001.fastq.gz
│ ├── sample_002.fastq.gz
│ ├── sample_003.fastq.gz
│ ├── sample_004.fastq.gz
│ ├── sample_005.fastq.gz
│ └── sample_data.csv
├── exhausted.nf
├── invalid_process.nf
├── missing_output.nf
├── missing_software.nf
├── missing_software_with_stub.nf
├── nextflow.config
└── no_such_var.nf
Ces fichiers représentent des scénarios de débogage courants que vous rencontrerez dans le développement en conditions réelles.
Examiner l'exercice¶
Votre défi est d'exécuter chaque workflow, d'identifier la ou les erreurs, et de les corriger.
Pour chaque workflow bugué :
- Exécuter le workflow et observer l'erreur
- Analyser le message d'erreur : que vous dit Nextflow ?
- Localiser le problème dans le code en utilisant les indices fournis
- Corriger le bug et vérifier que votre solution fonctionne
- Réinitialiser le fichier avant de passer à la section suivante (utilisez
git checkout <filename>)
Les exercices progressent des erreurs de syntaxe simples vers des problèmes d'exécution plus subtils. Les solutions sont discutées en ligne, mais essayez de résoudre chaque problème vous-même avant de lire la suite.
Liste de vérification de préparation¶
Pensez-vous être prêt·e à vous lancer ?
- Je comprends l'objectif de ce cours et ses prérequis
- Mon espace de code est opérationnel
- J'ai défini mon répertoire de travail de manière appropriée
- Je comprends l'exercice
Si vous pouvez cocher toutes les cases, vous êtes prêt·e à commencer.
1. Erreurs de Syntaxe¶
Les erreurs de syntaxe sont le type d'erreur le plus courant que vous rencontrerez lors de l'écriture de code Nextflow. Elles se produisent lorsque le code ne se conforme pas aux règles de syntaxe attendues du DSL Nextflow. Ces erreurs empêchent votre workflow de s'exécuter du tout, il est donc important d'apprendre à les identifier et à les corriger rapidement.
1.1. Accolades manquantes¶
L'une des erreurs de syntaxe les plus courantes, et parfois l'une des plus complexes à déboguer, est les crochets manquants ou mal appariés.
Commençons par un exemple pratique.
Exécuter le pipeline¶
Sortie de la commande
Éléments clés des messages d'erreur de syntaxe :
- Fichier et emplacement : Indique quel fichier et quelle ligne/colonne contiennent l'erreur (
bad_syntax.nf:24:1) - Description de l'erreur : Explique ce que l'analyseur a trouvé qu'il n'attendait pas (
Unexpected input: '<EOF>') - Indicateur EOF : Le message
<EOF>(End Of File) indique que l'analyseur a atteint la fin du fichier en attendant toujours plus de contenu - un signe classique d'accolades non fermées
Vérifier le code¶
Maintenant, examinons bad_syntax.nf pour comprendre ce qui cause l'erreur :
Pour les besoins de cet exemple, nous avons laissé un commentaire pour vous montrer où se trouve l'erreur. L'extension VSCode Nextflow devrait également vous donner quelques indices sur ce qui pourrait ne pas aller, en mettant l'accolade mal appariée en rouge et en soulignant la fin prématurée du fichier :

Stratégie de débogage pour les erreurs d'accolades :
- Utilisez la correspondance d'accolades de VS Code (placez le curseur à côté d'une accolade)
- Vérifiez le panneau Problèmes pour les messages liés aux accolades
- Assurez-vous que chaque
{d'ouverture a un}de fermeture correspondant
Corriger le code¶
Remplacez le commentaire par l'accolade fermante manquante :
Exécuter le pipeline¶
Maintenant, exécutez à nouveau le workflow pour confirmer qu'il fonctionne :
Sortie de la commande
1.2. Utilisation de mots-clés ou directives de processus incorrects¶
Une autre erreur de syntaxe courante est une définition de processus invalide. Cela peut se produire si vous oubliez de définir des blocs requis ou si vous utilisez des directives incorrectes dans la définition du processus.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `invalid_process.nf` [nasty_jepsen] DSL2 - revision: da9758d614
Error invalid_process.nf:3:1: Invalid process definition -- check for missing or out-of-order section labels
│ 3 | process PROCESS_FILES {
│ | ^^^^^^^^^^^^^^^^^^^^^^^
│ 4 | inputs:
│ 5 | val sample_name
│ 6 |
╰ 7 | output:
ERROR ~ Script compilation failed
-- Check '.nextflow.log' file for details
Vérifier le code¶
L'erreur indique une "Définition de processus invalide" et montre le contexte autour du problème. En regardant les lignes 3-7, nous pouvons voir inputs: à la ligne 4, qui est le problème. Examinons invalid_process.nf :
En regardant la ligne 4 dans le contexte de l'erreur, nous pouvons repérer le problème : nous utilisons inputs au lieu de la directive correcte input. L'extension VSCode Nextflow signalera également ceci :

Corriger le code¶
Remplacez le mot-clé incorrect par le bon en consultant la documentation :
Exécuter le pipeline¶
Maintenant, exécutez à nouveau le workflow pour confirmer qu'il fonctionne :
Sortie de la commande
1.3. Utilisation de mauvais noms de variables¶
Les noms de variables que vous utilisez dans vos blocs de script doivent être valides, dérivés soit des entrées, soit du code groovy inséré avant le script. Mais lorsque vous gérez la complexité au début du développement de pipeline, il est facile de faire des erreurs dans la dénomination des variables, et Nextflow vous le fera savoir rapidement.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `no_such_var.nf` [gloomy_meninsky] DSL2 - revision: 0c4d3bc28c
Error no_such_var.nf:17:39: `undefined_var` is not defined
│ 17 | echo "Using undefined variable: ${undefined_var}" >> ${output_pref
╰ | ^^^^^^^^^^^^^
ERROR ~ Script compilation failed
-- Check '.nextflow.log' file for details
L'erreur est détectée au moment de la compilation et pointe directement vers la variable non définie à la ligne 17, avec un caret indiquant exactement où se trouve le problème.
Vérifier le code¶
Examinons no_such_var.nf :
Le message d'erreur indique que la variable n'est pas reconnue dans le template de script, et vous devriez pouvoir voir ${undefined_var} utilisé dans le bloc script, mais non défini ailleurs.
Corriger le code¶
Si vous obtenez une erreur 'No such variable', vous pouvez la corriger soit en définissant la variable (en corrigeant les noms de variables d'entrée ou en modifiant le code groovy avant le script), soit en la supprimant du bloc script si elle n'est pas nécessaire :
Exécuter le pipeline¶
Maintenant, exécutez à nouveau le workflow pour confirmer qu'il fonctionne :
Sortie de la commande
1.4. Mauvaise utilisation des variables Bash¶
En débutant avec Nextflow, il peut être difficile de comprendre la différence entre les variables Nextflow (Groovy) et Bash. Cela peut générer une autre forme d'erreur de variable incorrecte qui apparaît lors de la tentative d'utilisation de variables dans le contenu Bash du bloc script.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `bad_bash_var.nf` [infallible_mandelbrot] DSL2 - revision: 0853c11080
Error bad_bash_var.nf:13:42: `prefix` is not defined
│ 13 | echo "Processing ${sample_name}" > ${prefix}.txt
╰ | ^^^^^^
ERROR ~ Script compilation failed
-- Check '.nextflow.log' file for details
Vérifier le code¶
L'erreur pointe vers la ligne 13 où ${prefix} est utilisé. Examinons bad_bash_var.nf pour voir ce qui cause le problème :
| bad_bash_var.nf | |
|---|---|
Dans cet exemple, nous définissons la variable prefix en Bash, mais dans un processus Nextflow, la syntaxe $ que nous avons utilisée pour y faire référence (${prefix}) est interprétée comme une variable Groovy, pas Bash. La variable n'existe pas dans le contexte Groovy, donc nous obtenons une erreur 'no such variable'.
Corriger le code¶
Si vous voulez utiliser une variable Bash, vous devez échapper le signe dollar comme ceci :
| bad_bash_var.nf | |
|---|---|
Cela indique à Nextflow d'interpréter ceci comme une variable Bash.
Exécuter le pipeline¶
Maintenant, exécutez à nouveau le workflow pour confirmer qu'il fonctionne :
Sortie de la commande
Variables Groovy vs Variables Bash
Pour les manipulations de variables simples comme la concaténation de chaînes ou les opérations de préfixe/suffixe, il est généralement plus lisible d'utiliser des variables Groovy dans la section script plutôt que des variables Bash dans le bloc script :
Cette approche évite le besoin d'échapper les signes dollar et rend le code plus facile à lire et à maintenir.
1.5. Instructions en Dehors du Bloc Workflow¶
L'extension VSCode Nextflow met en évidence les problèmes de structure de code qui causeront des erreurs. Un exemple courant est la définition de canaux en dehors du bloc workflow {} - ceci est maintenant imposé comme une erreur de syntaxe.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `badpractice_syntax.nf` [intergalactic_colden] DSL2 - revision: 5e4b291bde
Error badpractice_syntax.nf:3:1: Statements cannot be mixed with script declarations -- move statements into a process or workflow
│ 3 | input_ch = channel.of('sample1', 'sample2', 'sample3')
╰ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR ~ Script compilation failed
-- Check '.nextflow.log' file for details
Le message d'erreur indique clairement le problème : les instructions (comme les définitions de canaux) ne peuvent pas être mélangées avec les déclarations de script en dehors d'un bloc workflow ou process.
Vérifier le code¶
Examinons badpractice_syntax.nf pour voir ce qui cause l'erreur :
L'extension VSCode soulignera également la variable input_ch comme étant définie en dehors du bloc workflow :

Corriger le code¶
Déplacez la définition du canal à l'intérieur du bloc workflow :
Exécuter le pipeline¶
Exécutez à nouveau le workflow pour confirmer que la correction fonctionne :
Sortie de la commande
Gardez vos canaux d'entrée définis dans le bloc workflow, et en général suivez toutes les autres recommandations faites par l'extension.
À retenir¶
Vous pouvez identifier et corriger systématiquement les erreurs de syntaxe en utilisant les messages d'erreur de Nextflow et les indicateurs visuels de l'IDE. Les erreurs de syntaxe courantes incluent les accolades manquantes, les mots-clés de processus incorrects, les variables non définies et l'utilisation inappropriée des variables Bash vs Nextflow. L'extension VSCode aide à détecter bon nombre de ces erreurs avant l'exécution. Avec ces compétences de débogage de syntaxe dans votre boîte à outils, vous serez capable de résoudre rapidement les erreurs de syntaxe Nextflow les plus courantes et de passer à la résolution de problèmes d'exécution plus complexes.
Et ensuite ?¶
Apprenez à déboguer des erreurs de structure de canal plus complexes qui se produisent même lorsque la syntaxe est correcte.
2. Erreurs de Structure des Canaux¶
Les erreurs de structure des canaux sont plus subtiles que les erreurs de syntaxe car le code est syntaxiquement correct, mais les formes de données ne correspondent pas à ce que les processus attendent. Nextflow tentera d'exécuter le pipeline, mais pourrait constater que le nombre d'entrées ne correspond pas à ce qu'il attend et échouer. Ces erreurs n'apparaissent généralement qu'à l'exécution et nécessitent une compréhension des données circulant dans votre workflow.
Débogage des Canaux avec .view()
Tout au long de cette section, rappelez-vous que vous pouvez utiliser l'opérateur .view() pour inspecter le contenu des canaux à n'importe quel point de votre workflow. C'est l'un des outils de débogage les plus puissants pour comprendre les problèmes de structure des canaux. Nous explorerons cette technique en détail dans la section 2.4, mais n'hésitez pas à l'utiliser pendant que vous travaillez sur les exemples.
2.1. Mauvais Nombre de Canaux d'Entrée¶
Cette erreur se produit lorsque vous passez un nombre différent de canaux que ce qu'un processus attend.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `bad_number_inputs.nf` [happy_swartz] DSL2 - revision: d83e58dcd3
Error bad_number_inputs.nf:23:5: Incorrect number of call arguments, expected 1 but received 2
│ 23 | PROCESS_FILES(samples_ch, files_ch)
╰ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR ~ Script compilation failed
-- Check '.nextflow.log' file for details
Vérifier le code¶
Le message d'erreur indique clairement que l'appel attendait 1 argument mais en a reçu 2, et pointe vers la ligne 23. Examinons bad_number_inputs.nf :
Vous devriez voir l'appel PROCESS_FILES mal apparié, fournissant plusieurs canaux d'entrée alors que le processus n'en définit qu'un. L'extension VSCode soulignera également l'appel du processus en rouge, et fournira un message de diagnostic au survol :

Corriger le code¶
Pour cet exemple spécifique, le processus attend un seul canal et ne nécessite pas le second canal, nous pouvons donc le corriger en passant uniquement le canal samples_ch :
Exécuter le pipeline¶
Sortie de la commande
Plus couramment que dans cet exemple, vous pourriez ajouter des entrées supplémentaires à un processus et oublier de mettre à jour l'appel du workflow en conséquence, ce qui peut conduire à ce type d'erreur. Heureusement, c'est l'une des erreurs les plus faciles à comprendre et à corriger, car le message d'erreur est assez clair sur le décalage.
2.2. Épuisement des Canaux (Le Processus S'Exécute Moins de Fois Que Prévu)¶
Certaines erreurs de structure de canal sont beaucoup plus subtiles et ne produisent aucune erreur du tout. Probablement la plus courante de celles-ci reflète un défi auquel les nouveaux·elles utilisateur·trices de Nextflow sont confronté·es en comprenant que les canaux de file peuvent être épuisés et manquer d'éléments, ce qui signifie que le workflow se termine prématurément.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `exhausted.nf` [extravagant_gauss] DSL2 - revision: 08cff7ba2a
executor > local (1)
[bd/f61fff] PROCESS_FILES (1) [100%] 1 of 1 ✔
Ce workflow se termine sans erreur, mais il ne traite qu'un seul échantillon !
Vérifier le code¶
Examinons exhausted.nf pour voir si c'est correct :
Le processus ne s'exécute qu'une seule fois au lieu de trois fois car le canal reference_ch est un canal de file qui s'épuise après la première exécution du processus. Lorsqu'un canal est épuisé, l'ensemble du processus s'arrête, même si d'autres canaux ont encore des éléments.
C'est un modèle courant où vous avez un seul fichier de référence qui doit être réutilisé sur plusieurs échantillons. La solution consiste à convertir le canal de référence en canal de valeur qui peut être réutilisé indéfiniment.
Corriger le code¶
Il existe plusieurs façons de résoudre ce problème selon le nombre de fichiers affectés.
Option 1 : Vous avez un seul fichier de référence que vous réutilisez beaucoup. Vous pouvez simplement créer un type de canal de valeur, qui peut être utilisé encore et encore. Il y a trois façons de faire cela :
1a Utilisez channel.value() :
| exhausted.nf (corrigé - Option 1a) | |
|---|---|
1b Utilisez l'opérateur first() :
| exhausted.nf (corrigé - Option 1b) | |
|---|---|
1c. Utilisez l'opérateur collect() :
| exhausted.nf (corrigé - Option 1c) | |
|---|---|
Option 2 : Dans des scénarios plus complexes, peut-être où vous avez plusieurs fichiers de référence pour tous les échantillons dans le canal d'échantillons, vous pouvez utiliser l'opérateur combine pour créer un nouveau canal qui combine les deux canaux en tuples :
| exhausted.nf (corrigé - Option 2) | |
|---|---|
L'opérateur .combine() génère un produit cartésien des deux canaux, donc chaque élément dans reference_ch sera apparié avec chaque élément dans input_ch. Cela permet au processus de s'exécuter pour chaque échantillon tout en utilisant la référence.
Cela nécessite d'ajuster l'entrée du processus. Dans notre exemple, le début de la définition du processus devrait être ajusté comme suit :
| exhausted.nf (corrigé - Option 2) | |
|---|---|
Cette approche peut ne pas convenir dans toutes les situations.
Exécuter le pipeline¶
Essayez l'une des corrections ci-dessus et exécutez à nouveau le workflow :
Sortie de la commande
Vous devriez maintenant voir tous les trois échantillons être traités au lieu d'un seul.
2.3. Mauvaise Structure du Contenu des Canaux¶
Lorsque les workflows atteignent un certain niveau de complexité, il peut être un peu difficile de suivre les structures internes de chaque canal, et les gens génèrent couramment des décalages entre ce que le processus attend et ce que le canal contient réellement. C'est plus subtil que le problème dont nous avons discuté plus tôt, où le nombre de canaux était incorrect. Dans ce cas, vous pouvez avoir le bon nombre de canaux d'entrée, mais la structure interne d'un ou plusieurs de ces canaux ne correspond pas à ce que le processus attend.
Exécuter le pipeline¶
Sortie de la commande
Launching `bad_channel_shape.nf` [hopeful_pare] DSL2 - revision: ffd66071a1
executor > local (3)
executor > local (3)
[3f/c2dcb3] PROCESS_FILES (3) [ 0%] 0 of 3 ✘
ERROR ~ Error executing process > 'PROCESS_FILES (1)'
Caused by:
Missing output file(s) `[sample1, file1.txt]_output.txt` expected by process `PROCESS_FILES (1)`
Command executed:
echo "Processing [sample1, file1.txt]" > [sample1, file1.txt]_output.txt
Command exit status:
0
Command output:
(empty)
Work dir:
/workspaces/training/side-quests/debugging/work/d6/1fb69d1d93300bbc9d42f1875b981e
Tip: when you have fixed the problem you can continue the execution adding the option `-resume` to the run command line
-- Check '.nextflow.log' file for details
Vérifier le code¶
Les crochets dans le message d'erreur fournissent l'indice ici - le processus traite le tuple comme une valeur unique, ce qui n'est pas ce que nous voulons. Examinons bad_channel_shape.nf :
Vous pouvez voir que nous générons un canal composé de tuples : ['sample1', 'file1.txt'], mais le processus attend une valeur unique, val sample_name. La commande exécutée montre que le processus essaie de créer un fichier nommé [sample3, file3.txt]_output.txt, ce qui n'est pas la sortie prévue.
Corriger le code¶
Pour corriger cela, si le processus nécessite les deux entrées, nous pourrions ajuster le processus pour accepter un tuple :
| bad_channel_shape.nf | |
|---|---|
Exécuter le pipeline¶
Choisissez l'une des solutions et réexécutez le workflow :
Sortie de la commande
2.4. Techniques de Débogage des Canaux¶
Utilisation de .view() pour l'Inspection des Canaux¶
L'outil de débogage le plus puissant pour les canaux est l'opérateur .view(). Avec .view(), vous pouvez comprendre la forme de vos canaux à toutes les étapes pour aider au débogage.
Exécuter le pipeline¶
Exécutez bad_channel_shape_viewed.nf pour voir cela en action :
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `bad_channel_shape_viewed.nf` [maniac_poisson] DSL2 - revision: b4f24dc9da
executor > local (3)
[c0/db76b3] PROCESS_FILES (3) [100%] 3 of 3 ✔
Channel content: [sample1, file1.txt]
Channel content: [sample2, file2.txt]
Channel content: [sample3, file3.txt]
After mapping: sample1
After mapping: sample2
After mapping: sample3
Vérifier le code¶
Examinons bad_channel_shape_viewed.nf pour voir comment .view() est utilisé :
Corriger le code¶
Pour vous éviter d'utiliser excessivement les opérations .view() à l'avenir pour comprendre le contenu des canaux, il est conseillé d'ajouter quelques commentaires pour aider :
| bad_channel_shape_viewed.nf (avec commentaires) | |
|---|---|
Cela deviendra plus important à mesure que vos workflows gagneront en complexité et que la structure des canaux deviendra plus opaque.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `bad_channel_shape_viewed.nf` [marvelous_koch] DSL2 - revision: 03e79cdbad
executor > local (3)
[ff/d67cec] PROCESS_FILES (2) | 3 of 3 ✔
Channel content: [sample1, file1.txt]
Channel content: [sample2, file2.txt]
Channel content: [sample3, file3.txt]
After mapping: sample1
After mapping: sample2
After mapping: sample3
À retenir¶
De nombreuses erreurs de structure de canal peuvent être créées avec une syntaxe Nextflow valide. Vous pouvez déboguer les erreurs de structure de canal en comprenant le flux de données, en utilisant des opérateurs .view() pour l'inspection, et en reconnaissant les modèles d'erreur comme les crochets indiquant des structures de tuple inattendues.
Et ensuite ?¶
Apprenez les erreurs créées par les définitions de processus.
3. Erreurs de Structure des Processus¶
La plupart des erreurs que vous rencontrerez liées aux processus seront liées à des erreurs que vous avez faites dans la formation de la commande, ou à des problèmes liés au logiciel sous-jacent. Cela dit, de manière similaire aux problèmes de canal ci-dessus, vous pouvez faire des erreurs dans la définition du processus qui ne sont pas des erreurs de syntaxe, mais qui causeront des erreurs à l'exécution.
3.1. Fichiers de Sortie Manquants¶
Une erreur courante lors de l'écriture de processus est de faire quelque chose qui génère un décalage entre ce que le processus attend et ce qui est généré.
Exécuter le pipeline¶
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `missing_output.nf` [zen_stone] DSL2 - revision: 37ff61f926
executor > local (3)
executor > local (3)
[fd/2642e9] process > PROCESS_FILES (2) [ 66%] 2 of 3, failed: 2
ERROR ~ Error executing process > 'PROCESS_FILES (3)'
Caused by:
Missing output file(s) `sample3.txt` expected by process `PROCESS_FILES (3)`
Command executed:
echo "Processing sample3" > sample3_output.txt
Command exit status:
0
Command output:
(empty)
Work dir:
/workspaces/training/side-quests/debugging/work/02/9604d49fb8200a74d737c72a6c98ed
Tip: when you have fixed the problem you can continue the execution adding the option `-resume` to the run command line
-- Check '.nextflow.log' file for details
Vérifier le code¶
Le message d'erreur indique que le processus s'attendait à produire un fichier de sortie nommé sample3.txt, mais le script crée en réalité sample3_output.txt. Examinons la définition du processus dans missing_output.nf :
| missing_output.nf | |
|---|---|
Vous devriez voir qu'il y a un décalage entre le nom du fichier de sortie dans le bloc output:, et celui utilisé dans le script. Ce décalage cause l'échec du processus. Si vous rencontrez ce type d'erreur, retournez vérifier que les sorties correspondent entre votre définition de processus et votre bloc de sortie.
Si le problème n'est toujours pas clair, vérifiez le répertoire de travail lui-même pour identifier les fichiers de sortie réels créés :
Pour cet exemple, cela nous mettrait en évidence qu'un suffixe _output est incorporé dans le nom du fichier de sortie, contrairement à notre définition output:.
Corriger le code¶
Corrigez le décalage en rendant le nom de fichier de sortie cohérent :
Exécuter le pipeline¶
Sortie de la commande
3.2. Logiciel manquant¶
Une autre classe d'erreurs se produit en raison d'erreurs dans la fourniture de logiciels. missing_software.nf est un workflow syntaxiquement valide, mais il dépend d'un logiciel externe pour fournir la commande cowpy qu'il utilise.
Exécuter le pipeline¶
Sortie de la commande
ERROR ~ Error executing process > 'PROCESS_FILES (3)'
Caused by:
Process `PROCESS_FILES (3)` terminated with an error exit status (127)
Command executed:
cowpy sample3 > sample3_output.txt
Command exit status:
127
Command output:
(empty)
Command error:
.command.sh: line 2: cowpy: command not found
Work dir:
/workspaces/training/side-quests/debugging/work/82/42a5bfb60c9c6ee63ebdbc2d51aa6e
Tip: you can try to figure out what's wrong by changing to the process work directory and showing the script file named `.command.sh`
-- Check '.nextflow.log' file for details
Le processus n'a pas accès à la commande que nous spécifions. Parfois, c'est parce qu'un script est présent dans le répertoire bin du workflow, mais n'a pas été rendu exécutable. D'autres fois, c'est parce que le logiciel n'est pas installé dans le conteneur ou l'environnement où le workflow s'exécute.
Vérifier le code¶
Attention à ce code de sortie 127 - il vous dit exactement le problème. Examinons missing_software.nf :
| missing_software.nf | |
|---|---|
Corriger le code¶
Nous avons été un peu malhonnêtes ici, et il n'y a en fait rien de mal avec le code. Nous devons simplement spécifier la configuration nécessaire pour exécuter le processus de manière à ce qu'il ait accès à la commande en question. Dans ce cas, le processus a une définition de conteneur, donc tout ce que nous devons faire est d'exécuter le workflow avec Docker activé.
Exécuter le pipeline¶
Nous avons configuré un profil Docker pour vous dans nextflow.config, vous pouvez donc exécuter le workflow avec :
Sortie de la commande
Note
Pour en savoir plus sur l'utilisation des conteneurs par Nextflow, voir Hello Nextflow
3.3. Mauvaise configuration des ressources¶
En production, vous configurerez les ressources de vos processus. Par exemple, memory définit la quantité maximale de mémoire disponible pour votre processus, et si le processus dépasse cette limite, votre ordonnanceur tuera typiquement le processus et renverra un code de sortie 137. Nous ne pouvons pas le démontrer ici car nous utilisons l'exécuteur local, mais nous pouvons montrer quelque chose de similaire avec time.
Exécuter le pipeline¶
bad_resources.nf a une configuration de processus avec une limite de temps irréaliste de 1 milliseconde :
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `bad_resources.nf` [disturbed_elion] DSL2 - revision: 27d2066e86
executor > local (3)
[c0/ded8e1] PROCESS_FILES (3) | 0 of 3 ✘
ERROR ~ Error executing process > 'PROCESS_FILES (2)'
Caused by:
Process exceeded running time limit (1ms)
Command executed:
cowpy sample2 > sample2_output.txt
Command exit status:
-
Command output:
(empty)
Work dir:
/workspaces/training/side-quests/debugging/work/53/f0a4cc56d6b3dc2a6754ff326f1349
Container:
community.wave.seqera.io/library/cowpy:1.1.5--3db457ae1977a273
Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`
-- Check '.nextflow.log' file for details
Vérifier le code¶
Examinons bad_resources.nf :
| bad_resources.nf | |
|---|---|
Nous savons que le processus prendra plus d'une seconde (nous avons ajouté un sleep pour nous en assurer), mais le processus est configuré pour expirer après 1 milliseconde. Quelqu'un a été un peu irréaliste avec sa configuration !
Corriger le code¶
Augmentez la limite de temps à une valeur réaliste :
| bad_resources.nf | |
|---|---|
Exécuter le pipeline¶
Sortie de la commande
Si vous prenez soin de lire vos messages d'erreur, des échecs comme celui-ci ne devraient pas vous déconcerter trop longtemps. Mais assurez-vous de comprendre les besoins en ressources des commandes que vous exécutez afin de configurer vos directives de ressources de manière appropriée.
3.4. Techniques de Débogage des Processus¶
Lorsque des processus échouent ou se comportent de manière inattendue, vous avez besoin de techniques systématiques pour investiguer ce qui s'est mal passé. Le répertoire de travail contient toutes les informations dont vous avez besoin pour déboguer l'exécution du processus.
Utilisation de l'Inspection du Répertoire de Travail¶
L'outil de débogage le plus puissant pour les processus est l'examen du répertoire de travail. Lorsqu'un processus échoue, Nextflow crée un répertoire de travail pour cette exécution spécifique du processus contenant tous les fichiers nécessaires pour comprendre ce qui s'est passé.
Exécuter le pipeline¶
Utilisons l'exemple missing_output.nf de tout à l'heure pour démontrer l'inspection du répertoire de travail (régénérez un décalage de nommage de sortie si nécessaire) :
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `missing_output.nf` [irreverent_payne] DSL2 - revision: 3d5117f7e2
executor > local (3)
[5d/d544a4] PROCESS_FILES (2) | 0 of 3 ✘
ERROR ~ Error executing process > 'PROCESS_FILES (1)'
Caused by:
Missing output file(s) `sample1.txt` expected by process `PROCESS_FILES (1)`
Command executed:
echo "Processing sample1" > sample1_output.txt
Command exit status:
0
Command output:
(empty)
Work dir:
/workspaces/training/side-quests/debugging/work/1e/2011154d0b0f001cd383d7364b5244
Tip: you can replicate the issue by changing to the process work dir and entering the command `bash .command.run`
-- Check '.nextflow.log' file for details
Vérifier le répertoire de travail¶
Lorsque vous obtenez cette erreur, le répertoire de travail contient toutes les informations de débogage. Trouvez le chemin du répertoire de travail dans le message d'erreur et examinez son contenu :
# Trouvez le répertoire de travail dans le message d'erreur
ls work/02/9604d49fb8200a74d737c72a6c98ed/
Vous pouvez ensuite examiner les fichiers clés :
Vérifier le Script de Commande¶
Le fichier .command.sh montre exactement quelle commande a été exécutée :
Cela révèle :
- Substitution de variables : Si les variables Nextflow ont été correctement développées
- Chemins de fichiers : Si les fichiers d'entrée ont été correctement localisés
- Structure de la commande : Si la syntaxe du script est correcte
Problèmes courants à rechercher :
- Guillemets manquants : Les variables contenant des espaces nécessitent des guillemets appropriés
- Mauvais chemins de fichiers : Fichiers d'entrée qui n'existent pas ou sont au mauvais endroit
- Noms de variables incorrects : Fautes de frappe dans les références de variables
- Configuration d'environnement manquante : Commandes qui dépendent d'environnements spécifiques
Vérifier la Sortie d'Erreur¶
Le fichier .command.err contient les messages d'erreur réels :
Ce fichier montrera :
- Codes de sortie : 127 (commande introuvable), 137 (tué), etc.
- Erreurs de permission : Problèmes d'accès aux fichiers
- Erreurs logicielles : Messages d'erreur spécifiques à l'application
- Erreurs de ressources : Limite de mémoire/temps dépassée
Vérifier la Sortie Standard¶
Le fichier .command.out montre ce que votre commande a produit :
Cela aide à vérifier :
- Sortie attendue : Si la commande a produit les bons résultats
- Exécution partielle : Si la commande a démarré mais a échoué en cours de route
- Informations de débogage : Toute sortie de diagnostic de votre script
Vérifier le Code de Sortie¶
Le fichier .exitcode contient le code de sortie du processus :
Codes de sortie courants et leurs significations :
- Code de sortie 127 : Commande introuvable - vérifiez l'installation du logiciel
- Code de sortie 137 : Processus tué - vérifiez les limites de mémoire/temps
Vérifier l'Existence des Fichiers¶
Lorsque les processus échouent en raison de fichiers de sortie manquants, vérifiez quels fichiers ont réellement été créés :
# Lister tous les fichiers dans le répertoire de travail
ls -la work/02/9604d49fb8200a74d737c72a6c98ed/
Cela aide à identifier :
- Décalages de noms de fichiers : Fichiers de sortie avec des noms différents de ceux attendus
- Problèmes de permissions : Fichiers qui n'ont pas pu être créés
- Problèmes de chemin : Fichiers créés dans de mauvais répertoires
Dans notre exemple précédent, cela nous a confirmé que tandis que notre sample3.txt attendu n'était pas présent, sample3_output.txt l'était :
À retenir¶
Le débogage des processus nécessite l'examen des répertoires de travail pour comprendre ce qui s'est mal passé. Les fichiers clés incluent .command.sh (le script exécuté), .command.err (les messages d'erreur) et .command.out (la sortie standard). Les codes de sortie comme 127 (commande introuvable) et 137 (processus tué) fournissent des indices diagnostiques immédiats sur le type de défaillance.
Et ensuite ?¶
Découvrez les outils de débogage intégrés de Nextflow et les approches systématiques de dépannage.
4. Outils de Débogage Intégrés et Techniques Avancées¶
Nextflow fournit plusieurs outils intégrés puissants pour le débogage et l'analyse de l'exécution des workflows. Ces outils vous aident à comprendre ce qui s'est mal passé, où cela s'est mal passé et comment le corriger efficacement.
4.1. Sortie de Processus en Temps Réel¶
Parfois, vous devez voir ce qui se passe à l'intérieur des processus en cours d'exécution. Vous pouvez activer la sortie de processus en temps réel, qui vous montre exactement ce que chaque tâche fait pendant son exécution.
Exécuter le pipeline¶
bad_channel_shape_viewed.nf de nos exemples précédents a affiché le contenu des canaux en utilisant .view(), mais nous pouvons aussi utiliser la directive debug pour afficher des variables depuis l'intérieur du processus lui-même, ce que nous démontrons dans bad_channel_shape_viewed_debug.nf. Exécutez le workflow :
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `bad_channel_shape_viewed_debug.nf` [agitated_crick] DSL2 - revision: ea3676d9ec
executor > local (3)
[c6/2dac51] process > PROCESS_FILES (3) [100%] 3 of 3 ✔
Channel content: [sample1, file1.txt]
Channel content: [sample2, file2.txt]
Channel content: [sample3, file3.txt]
After mapping: sample1
After mapping: sample2
After mapping: sample3
Sample name inside process is sample2
Sample name inside process is sample1
Sample name inside process is sample3
Vérifier le code¶
Examinons bad_channel_shape_viewed_debug.nf pour voir comment la directive debug fonctionne :
| bad_channel_shape_viewed_debug.nf | |
|---|---|
La directive debug peut être un moyen rapide et pratique pour comprendre l'environnement d'un processus.
4.2. Mode Preview¶
Parfois, vous voulez détecter des problèmes avant que des processus ne s'exécutent. Nextflow fournit un flag pour ce type de débogage proactif : -preview.
Exécuter le pipeline¶
Le mode preview vous permet de tester la logique du workflow sans exécuter de commandes. Cela peut être très utile pour vérifier rapidement la structure de votre workflow et s'assurer que les processus sont correctement connectés sans exécuter de commandes réelles.
Note
Si vous avez corrigé bad_syntax.nf plus tôt, réintroduisez l'erreur de syntaxe en supprimant l'accolade fermante après le bloc script avant d'exécuter cette commande.
Exécutez cette commande :
Sortie de la commande
Le mode preview est particulièrement utile pour détecter les erreurs de syntaxe tôt sans exécuter de processus. Il valide la structure du workflow et les connexions des processus avant l'exécution.
4.3. Exécution Stub pour les Tests de Logique¶
Parfois, les erreurs sont difficiles à déboguer parce que les commandes prennent trop de temps, nécessitent un logiciel spécial ou échouent pour des raisons complexes. L'exécution stub vous permet de tester la logique du workflow sans exécuter les commandes réelles.
Exécuter le pipeline¶
Lorsque vous développez un processus Nextflow, vous pouvez utiliser la directive stub pour définir des commandes 'fictives' qui génèrent des sorties de la forme correcte sans exécuter la commande réelle. Cette approche est particulièrement précieuse lorsque vous voulez vérifier que la logique de votre workflow est correcte avant de traiter les complexités du logiciel réel.
Par exemple, vous souvenez-vous de notre missing_software.nf de tout à l'heure ? Celui où nous avions un logiciel manquant qui empêchait le workflow de s'exécuter jusqu'à ce que nous ajoutions -profile docker ? missing_software_with_stub.nf est un workflow très similaire. Si nous l'exécutons de la même manière, nous générerons la même erreur :
Sortie de la commande
ERROR ~ Error executing process > 'PROCESS_FILES (3)'
Caused by:
Process `PROCESS_FILES (3)` terminated with an error exit status (127)
Command executed:
cowpy sample3 > sample3_output.txt
Command exit status:
127
Command output:
(empty)
Command error:
.command.sh: line 2: cowpy: command not found
Work dir:
/workspaces/training/side-quests/debugging/work/82/42a5bfb60c9c6ee63ebdbc2d51aa6e
Tip: you can try to figure out what's wrong by changing to the process work directory and showing the script file named `.command.sh`
-- Check '.nextflow.log' file for details
Cependant, ce workflow ne produira pas d'erreurs si nous l'exécutons avec -stub-run, même sans le profil docker :
Sortie de la commande
Vérifier le code¶
Examinons missing_software_with_stub.nf :
| missing_software.nf (with stub) | |
|---|---|
Par rapport à missing_software.nf, ce processus a une directive stub: spécifiant une commande à utiliser à la place de celle spécifiée dans script:, dans le cas où Nextflow est exécuté en mode stub.
La commande touch que nous utilisons ici ne dépend d'aucun logiciel ou entrées appropriées, et s'exécutera dans toutes les situations, nous permettant de déboguer la logique du workflow sans nous soucier des détails internes du processus.
L'exécution stub aide à déboguer :
- La structure des canaux et le flux de données
- Les connexions et dépendances des processus
- La propagation des paramètres
- La logique du workflow sans dépendances logicielles
4.4. Approche Systématique de Débogage¶
Maintenant que vous avez appris des techniques de débogage individuelles - des fichiers de trace et répertoires de travail au mode preview, l'exécution stub et la surveillance des ressources - combinons-les en une méthodologie systématique. Avoir une approche structurée vous empêche d'être submergé par des erreurs complexes et garantit que vous ne manquerez pas d'indices importants.
Cette méthodologie combine tous les outils que nous avons couverts en un workflow efficace :
Méthode de Débogage en Quatre Phases :
Phase 1 : Résolution des Erreurs de Syntaxe (5 minutes)
- Vérifiez les soulignements rouges dans VSCode ou votre IDE
- Exécutez
nextflow run workflow.nf -previewpour identifier les problèmes de syntaxe - Corrigez toutes les erreurs de syntaxe (accolades manquantes, virgules finales, etc.)
- Assurez-vous que le workflow s'analyse avec succès avant de continuer
Phase 2 : Évaluation Rapide (5 minutes)
- Lisez attentivement les messages d'erreur d'exécution
- Vérifiez s'il s'agit d'une erreur d'exécution, de logique ou de ressources
- Utilisez le mode preview pour tester la logique de base du workflow
Phase 3 : Investigation Détaillée (15-30 minutes)
- Trouvez le répertoire de travail de la tâche échouée
- Examinez les fichiers de log
- Ajoutez des opérateurs
.view()pour inspecter les canaux - Utilisez
-stub-runpour tester la logique du workflow sans exécution
Phase 4 : Corriger et Valider (15 minutes)
- Faites des corrections minimales et ciblées
- Testez avec resume :
nextflow run workflow.nf -resume - Vérifiez l'exécution complète du workflow
Utilisation de Resume pour un Débogage Efficace
Une fois que vous avez identifié un problème, vous avez besoin d'un moyen efficace de tester vos corrections sans perdre de temps à réexécuter les parties réussies de votre workflow. La fonctionnalité -resume de Nextflow est inestimable pour le débogage.
Vous aurez rencontré -resume si vous avez travaillé sur Hello Nextflow, et il est important de bien l'utiliser lors du débogage pour vous éviter d'attendre pendant que les processus avant votre processus problématique s'exécutent.
Stratégie de débogage avec resume :
- Exécutez le workflow jusqu'à l'échec
- Examinez le répertoire de travail de la tâche échouée
- Corrigez le problème spécifique
- Reprenez pour tester uniquement la correction
- Répétez jusqu'à ce que le workflow se termine
Profil de Configuration de Débogage¶
Pour rendre cette approche systématique encore plus efficace, vous pouvez créer une configuration de débogage dédiée qui active automatiquement tous les outils dont vous avez besoin :
| nextflow.config (debug profile) | |
|---|---|
Ensuite, vous pouvez exécuter le pipeline avec ce profil activé :
Ce profil active la sortie en temps réel, préserve les répertoires de travail et limite la parallélisation pour un débogage plus facile.
4.5. Exercice Pratique de Débogage¶
Il est maintenant temps de mettre en pratique l'approche systématique de débogage. Le workflow buggy_workflow.nf contient plusieurs erreurs courantes qui représentent les types de problèmes que vous rencontrerez dans le développement réel.
Exercise
Utilisez l'approche systématique de débogage pour identifier et corriger toutes les erreurs dans buggy_workflow.nf. Ce workflow tente de traiter des données d'échantillons à partir d'un fichier CSV mais contient plusieurs bugs intentionnels représentant des scénarios de débogage courants.
Commencez par exécuter le workflow pour voir la première erreur :
Sortie de la commande
N E X T F L O W ~ version 25.10.2
Launching `buggy_workflow.nf` [wise_ramanujan] DSL2 - revision: d51a8e83fd
ERROR ~ Range [11, 12) out of bounds for length 11
-- Check '.nextflow.log' file for details
Cette erreur cryptique indique un problème d'analyse autour des lignes 11-12 dans le bloc params{}. L'analyseur v2 détecte les problèmes structurels tôt.
Appliquez la méthode de débogage en quatre phases que vous avez apprise :
Phase 1 : Résolution des Erreurs de Syntaxe
- Vérifiez les soulignements rouges dans VSCode ou votre IDE
- Exécutez nextflow run workflow.nf -preview pour identifier les problèmes de syntaxe
- Corrigez toutes les erreurs de syntaxe (accolades manquantes, virgules finales, etc.)
- Assurez-vous que le workflow s'analyse avec succès avant de continuer
Phase 2 : Évaluation Rapide
- Lisez attentivement les messages d'erreur d'exécution
- Identifiez si les erreurs sont liées à l'exécution, à la logique ou aux ressources
- Utilisez le mode -preview pour tester la logique de base du workflow
Phase 3 : Investigation Détaillée
- Examinez les répertoires de travail des tâches échouées
- Ajoutez des opérateurs .view() pour inspecter les canaux
- Vérifiez les fichiers de log dans les répertoires de travail
- Utilisez -stub-run pour tester la logique du workflow sans exécution
Phase 4 : Corriger et Valider
- Faites des corrections ciblées
- Utilisez -resume pour tester les corrections efficacement
- Vérifiez l'exécution complète du workflow
Outils de Débogage à Votre Disposition :
# Mode preview pour la vérification de syntaxe
nextflow run buggy_workflow.nf -preview
# Profil debug pour une sortie détaillée
nextflow run buggy_workflow.nf -profile debug
# Exécution stub pour les tests de logique
nextflow run buggy_workflow.nf -stub-run
# Resume après corrections
nextflow run buggy_workflow.nf -resume
Solution
Le buggy_workflow.nf contient 9 ou 10 erreurs distinctes (selon la façon dont vous comptez) couvrant toutes les catégories principales de débogage. Voici une analyse systématique de chaque erreur et comment la corriger
Commençons par les erreurs de syntaxe :
Erreur 1 : Erreur de Syntaxe - Virgule Finale
Correction : Supprimez la virgule finaleErreur 2 : Erreur de Syntaxe - Accolade Fermante Manquante
Erreur 3 : Erreur de Nom de Variable
Erreur 4 : Erreur de Variable Non Définie
À ce stade, le workflow s'exécutera, mais nous aurons toujours des erreurs (ex. Path value cannot be null dans processFiles), causées par une mauvaise structure de canal.
Erreur 5 : Erreur de Structure de Canal - Mauvaise Sortie Map
Mais cela cassera notre correction pour l'exécution de heavyProcess() ci-dessus, nous devrons donc utiliser un map pour ne passer que les IDs d'échantillons à ce processus :
Erreur 6 : Mauvaise structure de canal pour heavyProcess
Maintenant nous avançons un peu plus mais recevons une erreur à propos de No such variable: i, parce que nous n'avons pas échappé une variable Bash.
Erreur 7 : Erreur d'Échappement de Variable Bash
Maintenant nous obtenons Process exceeded running time limit (1ms), donc nous corrigeons la limite de temps d'exécution pour le processus concerné :
Erreur 8 : Erreur de Configuration de Ressources
Ensuite, nous avons une erreur Missing output file(s) à résoudre :
Erreur 9 : Décalage de Nom de Fichier de Sortie
Les deux premiers processus se sont exécutés, mais pas le troisième.
Erreur 10 : Décalage de Nom de Fichier de Sortie
Avec cela, l'ensemble du workflow devrait s'exécuter.
Workflow Corrigé Complet :
Catégories d'Erreurs Couvertes :
- Erreurs de syntaxe : Accolades manquantes, virgules finales, variables non définies
- Erreurs de structure de canal : Mauvaises formes de données, canaux non définis
- Erreurs de processus : Décalages de fichiers de sortie, échappement de variables
- Erreurs de ressources : Limites de temps irréalistes
Leçons Clés de Débogage :
- Lisez attentivement les messages d'erreur - ils pointent souvent directement vers le problème
- Utilisez des approches systématiques - corrigez une erreur à la fois et testez avec
-resume - Comprenez le flux de données - les erreurs de structure de canal sont souvent les plus subtiles
- Vérifiez les répertoires de travail - quand les processus échouent, les logs vous disent exactement ce qui s'est mal passé
Résumé¶
Dans cette quête annexe, vous avez appris un ensemble de techniques systématiques pour déboguer les workflows Nextflow. L'application de ces techniques dans votre propre travail vous permettra de passer moins de temps à lutter contre votre ordinateur, de résoudre les problèmes plus rapidement et de vous protéger contre les problèmes futurs.
Modèles clés¶
1. Comment identifier et corriger les erreurs de syntaxe :
- Interprétation des messages d'erreur de Nextflow et localisation des problèmes
- Erreurs de syntaxe courantes : accolades manquantes, mots-clés incorrects, variables non définies
- Distinction entre les variables Nextflow (Groovy) et Bash
- Utilisation des fonctionnalités de l'extension VS Code pour la détection précoce des erreurs
// Accolade manquante - cherchez les soulignements rouges dans l'IDE
process FOO {
script:
"""
echo "hello"
"""
// } <-- manquante !
// Mauvais mot-clé
inputs: // Devrait être 'input:'
// Variable non définie - échappez avec un backslash pour les variables Bash
echo "${undefined_var}" // Variable Nextflow (erreur si non définie)
echo "\${bash_var}" // Variable Bash (échappée)
2. Comment déboguer les problèmes de structure de canal :
- Compréhension de la cardinalité des canaux et des problèmes d'épuisement
- Débogage des décalages de structure de contenu des canaux
- Utilisation des opérateurs
.view()pour l'inspection des canaux - Reconnaissance des modèles d'erreur comme les crochets dans la sortie
// Inspecter le contenu du canal
my_channel.view { "Content: $it" }
// Convertir un canal de file en canal de valeur (empêche l'épuisement)
reference_ch = channel.value('ref.fa')
// ou
reference_ch = channel.of('ref.fa').first()
3. Comment résoudre les problèmes d'exécution des processus :
- Diagnostic des erreurs de fichiers de sortie manquants
- Compréhension des codes de sortie (127 pour logiciel manquant, 137 pour problèmes de mémoire)
- Investigation des répertoires de travail et fichiers de commande
- Configuration appropriée des ressources
# Vérifier ce qui a été réellement exécuté
cat work/ab/cdef12/.command.sh
# Vérifier la sortie d'erreur
cat work/ab/cdef12/.command.err
# Code de sortie 127 = commande introuvable
# Code de sortie 137 = tué (limite de mémoire/temps)
4. Comment utiliser les outils de débogage intégrés de Nextflow :
- Exploitation du mode preview et du débogage en temps réel
- Implémentation de l'exécution stub pour les tests de logique
- Application de resume pour des cycles de débogage efficaces
- Suivi d'une méthodologie de débogage systématique en quatre phases
Référence Rapide de Débogage
Erreurs de syntaxe ? → Vérifiez les avertissements VSCode, exécutez nextflow run workflow.nf -preview
Problèmes de canal ? → Utilisez .view() pour inspecter le contenu : my_channel.view()
Échecs de processus ? → Vérifiez les fichiers du répertoire de travail :
.command.sh- le script exécuté.command.err- les messages d'erreur.exitcode- le statut de sortie (127 = commande introuvable, 137 = tué)
Comportement mystérieux ? → Exécutez avec -stub-run pour tester la logique du workflow
Corrections effectuées ? → Utilisez -resume pour gagner du temps lors des tests : nextflow run workflow.nf -resume
Ressources supplémentaires¶
- Guide de dépannage Nextflow : Documentation officielle de dépannage
- Comprendre les canaux Nextflow : Exploration approfondie des types et comportements de canaux
- Référence des directives de processus : Toutes les options de configuration de processus disponibles
- nf-test : Framework de test pour les pipelines Nextflow
- Communauté Slack Nextflow : Obtenir de l'aide de la communauté
Pour les workflows de production, considérez :
- La mise en place de Seqera Platform pour la surveillance et le débogage à grande échelle
- L'utilisation de Wave containers pour des environnements logiciels reproductibles
N'oubliez pas : Le débogage efficace est une compétence qui s'améliore avec la pratique. La méthodologie systématique et la boîte à outils complète que vous avez acquises ici vous serviront bien tout au long de votre parcours de développement Nextflow.
Et ensuite ?¶
Retournez au menu des Quêtes Annexes ou cliquez sur le bouton en bas à droite de la page pour passer au sujet suivant de la liste.