while - moyen facile de détecter la boucle infinie dans le noyau du linux




while true bash (2)

Je viens de passer 2 heures supplémentaires à essayer de trouver un bogue dans ma modification du noyau de Linux, chaque fois que je connectais le module au noyau, c'était bon mais quand je l'ai déconnecté, ma souris s'est arrêtée pour fonctionner, donc en utilisant printk J'ai trouvé une boucle infinie, ma question est que quelqu'un connaît de bonnes techniques pour détecter de tels bugs, parfois il est difficile de trouver de telles boucles, et linux devient imprévisible, so how can I avoid infinite loops dans le noyau, merci d'avance



J'ai toujours trouvé printk utile pour ça, comme vous l'avez fait.

D'autres options seraient l'exécution de votre noyau dans Bochs en mode de débogage. Et si je me souviens, il y a un moyen d'exécuter le noyau dans gdb. Google peut vous aider avec ces options.

Oh, vous avez dit "éviter" pas "déboguer" ... hmm, la meilleure façon d'éviter est de ne pas pirater le noyau : ^)

Sérieusement, lorsque vous faites de la programmation au niveau du noyau, vous devez être très prudent. Ajoutez un main () au code qui stress-tests vos routines en usermode avant d'ajouter au noyau en cours d'exécution. Et relisez votre code, surtout après avoir isolé le bug dans une section particulière. Une fois, j'ai trouvé une boucle infinie dans le pilote de terminal de LynxOS quand un art ANSI a accroché le système d'exploitation. Apparemment, un programmeur junior avait écrit cette partie, analysant les options de la séquence d'échappement sous forme de texte plutôt que de nombres. Le code était si mauvais, je me suis dégoûté en essayant de localiser l'erreur exacte qui a forcé la boucle, et j'ai juste réécrit la majeure partie du pilote. Et testé en usermode avant d'ajouter au noyau.





linux-kernel