J'ai des problèmes avec l'un des projets sur lesquels je travaille sous Windows (64 bits). Le programme plante parfois, parfois non, et je suspecte que le problème soit lié à plusieurs runtime C liés. Comment puis-je détecter cela sur Windows? J'ai essayé avec depends.exe, mais il n'a pas signalé le CRTDétection de plusieurs runtimes C liés sur des fenêtres
Répondre
Il est plutôt improbable que vous puissiez lier statiquement avec plusieurs bibliothèques d'exécution C - vous rencontreriez de nombreux conflits de définition de symboles qui produiraient au moins des avertissements volumineux, et Seul un ingénieur insouciant les ignorerait. Avec depends
, avec depends
, je m'assurerais d'utiliser l'option de profilage dynamique, pour vérifier toutes les dépendances pour les CRTL dynamiques qu'ils chargent. Si rien ne se passe, je soupçonne que votre problème est ailleurs. Je suppose que votre problème est ailleurs dans tous les cas, car les DLL avec API de niveau C ne doivent pas, en règle générale, s'appuyer sur l'état partagé dans le CRTL - le plus souvent l'allocateur de mémoire - et devraient adopter un protocole normalisé pour la gestion de la mémoire inter-API, comme l'allocation d'appel, l'utilisation d'appel ou l'envoi de rappels d'allocation de mémoire, etc. En d'autres termes, plusieurs CRTL dans le même processus ne posent normalement pas problème. protocole de gestion de la mémoire.
Pour les échecs transitoires, je pense que le multithreading ou la corruption de tas.
Je vais regarder dans l'option de profilage dynamique, merci En ce qui concerne l'état partagé de CRLT, je ne pense pas que je peux faire quelque chose à ce sujet. C'est pour une extension python, et je ne contrôle simplement rien sur la partie d'allocation de mémoire (refcounting). Je suis surpris par votre affirmation selon laquelle plusieurs CRT ne sont pas un problème - je suis loin d'être un spécialiste de Windows, mais j'ai toujours lu que cela devrait être évité de plusieurs sources. Je comprends que cela peut être évité en faisant attention, mais je ne pense pas que ce soit faisable dans mon cas (car je ne contrôle pas toutes les parties de l'exécutable final). –
La plupart du temps que vous utilisez une DLL sur Windows, vous n'avez pas la source et ne pouvez pas contrôler quelle bibliothèque d'exécution il utilise. Ce n'est pas comme Linux, où il y a la bibliothèque GNU C, et chaque bibliothèque partagée peut (normalement) croire que malloc résout le même allocateur à travers le processus. De plus, les DLL peuvent être écrites dans différentes langues; une DLL Pascal utilisée dans un fichier C EXE, ou vice versa, ne peut pas partager les bibliothèques d'exécution, car elles ont des exigences différentes. Ainsi, une convention ou un protocole de gestion de la mémoire doit être suivi. –
J'ai finalement réussi à obtenir une trace de pile, et le problème est en effet un FILE * passé à travers les limites de la DLL. Donc je suppose que je vais devoir faire sans quelque chose. Connaissez-vous une référence concernant le protocole pour les limites dll sur les fenêtres? Je ne suis vraiment pas familier avec le sujet, et j'ai peur de devoir le traiter à plusieurs endroits dans les bases de code sur lesquelles je travaille. –
- 1. Comment créer plusieurs fenêtres/vues sur l'iPhone?
- 2. Détection de plusieurs touches pressées simultanées en C#
- 3. Autoriser l'ouverture de plusieurs fenêtres si les fenêtres n'existent pas
- 4. Plusieurs fenêtres dans OpenGL?
- 5. Dessin sur toutes les fenêtres sur plusieurs moniteurs
- 6. Gérer plusieurs événements vous maintenez la touche C fenêtres # forme
- 7. Détection de texte sur un sujet?
- 8. Comment puis-je accrocher plusieurs fenêtres en C#?
- 9. Plusieurs fenêtres dans Adobe AIR
- 10. Plusieurs fenêtres pop-up Javascript
- 11. Erreur BlueCloth sur les fenêtres
- 12. Afficher des graphiques différents dans plusieurs fenêtres OpenGL
- 13. Plusieurs fenêtres ou "pages" dans une application
- 14. Environment.SpecialFolder sur les fenêtres étrangères
- 15. Détection EOF en C
- 16. en utilisant FindWindow avec plusieurs fenêtres racines
- 17. Menu de remplacement des fenêtres
- 18. Détection de son de clap en C#
- 19. Détection automatique des composants à l'aide des annotations de ressort
- 20. fenêtre étant sur le dessus des autres fenêtres dans l'application
- 21. Détection de l'apparence/disparition des volumes sur osx
- 22. L'activation de plusieurs fenêtres d'application ne fonctionne pas correctement
- 23. Alternatives aux crochets de fenêtres en C#?
- 24. phase de Mark sur une mauvaise détection collecte des ordures C
- 25. C Définition du test du préprocesseur de plusieurs macros
- 26. Possibilité d'inclure Mono Runtimes dans le bundle OSX .app?
- 27. méthodes détection de collision en C++
- 28. C++ Utilisation de fenêtres nommées tubes
- 29. Plusieurs fenêtres, mais aussi plusieurs éléments dans la barre des tâches
- 30. sur les fenêtres de asp.net compte
Où est l'accident? Avez-vous une trace de pile ou quelque chose? – Macke
Quelque part dans le runtime C, sans aucune trace de pile, malheureusement ... –