Pourquoi le noyau # p imprime-t-il en standard? Est-ce que printf debugging n'est pas censé sortir à l'erreur standard?Pourquoi le noyau # p imprime-t-il en standard?
Répondre
Pourquoi supposez-vous que le noyau n ° p est destiné au débogage? Il écrit à stdout comme noyau # print ou printf en C.
Si vous voulez écrire à l'erreur standard, vous pouvez faire:
$stderr.puts(x.inspect)
Par ailleurs, si vous voulez vraiment utiliser le débogage printf I vous suggère de lire ceci article about debugging techniques
Vous ne voulez pas dire '$ stderr.puts (x.inspect)'? –
Si vous voulez le comportement du noyau # p, oui. –
Vous pouvez définir une fonction globale "q", qui fonctionne exactement comme "p", sauf qu'elle imprime dans $ stderr.
#!/usr/bin/ruby1.8
module Kernel
def q(*stuff)
stuff.each { |thing| $stderr.print(thing.inspect + "\n")}
end
end
q 'foo' # => "foo"
Vous pourriez être tenté d'utiliser puts
au lieu de print ... + "\n"
. Ce code utilise print
pour le rendre thread-safe: puts
peut être interrompu entre le moment où il imprime ses arguments et le moment où il imprime la nouvelle ligne, provoquant l'apparition de deux threads sur une ligne. Il est rare que vous ayez du code provenant de plusieurs threads qui écrivent en même temps sur $ stdout/$ stderr, donc ce n'est généralement pas un problème. Mais étant un outil de débogage, vous finirez certainement par l'utiliser pour découvrir ce qui se passe dans les threads.
- 1. Démarrer le service en mode noyau (Vista)
- 2. Convertir Z-score (valeur Z, score standard) en valeur p pour la distribution normale en Python
- 3. Pourquoi syscall doit-il passer en mode noyau?
- 4. DllNotFoundException utilisant Mono P/Invoke: Pourquoi?
- 5. P/Invoke en Mono
- 6. Compiler le module noyau Linux (2.6) incluant les en-têtes non-noyau
- 7. Ressources pour écrire le noyau en C
- 8. Différence entre const char * p et le charbon const * p
- 9. Le noyau # obtient des tentatives de lecture de fichier au lieu de l'entrée standard
- 10. Pourquoi le premier paragraphe ne prend pas ce style p: first-child? Pourquoi
- 11. p vs met en Ruby
- 12. Pourquoi désactiver le tampon de sortie standard lors du multithreading?
- 13. comment définir le "dépend" pour le noyau en cours d'exécution
- 14. mettre en tags p en utilisant PHP?
- 15. Comment configurer le noyau Linux dans Buildroot?
- 16. erreur compilant le noyau Linux
- 17. Pourquoi ne pas emboîtées dans validate p comme XHTML
- 18. Pourquoi cette P/Invoke explicite ne fonctionne pas?
- 19. Pourquoi DisplayMemeberPath n'accepte pas une propriété standard?
- 20. Pourquoi ai-je besoin de re-compiler le module noyau vmware après une mise à niveau du noyau Linux?
- 21. Action standard
- 22. Comment patcher le noyau Linux?
- 23. Pourquoi l'arrière-plan p ne se positionne pas correctement?
- 24. rendement: pourquoi je ne peux pas écrire: p test_method {} i.upcase
- 25. c.erase (p) ne peut pas être compilé avec succès, pourquoi?
- 26. Ajouter un <p></p> en texte brut en HTML
- 27. donné un nombre p, trouver deux éléments dans le tableau dont le produit = P
- 28. MSBuild.exe n'acceptant pas non plus/p: DefineConstants ni/p: PreprocessorDefinitions
- 29. Obtention de la sortie standard lorsque p-invocation à une DLL non managée?
- 30. pilote en mode noyau écrire dans le fichier
Cela ne s'appellerait pas "printf debugging", alors, n'est-ce pas? printf() imprime sur stdout. – Ken