2013-09-05 2 views
-1

J'ai un outil programmé en C#, dont l'exécutable est partagé par de nombreux utilisateurs.La variable C# est corrompue sur un PC spécifique mais fonctionne bien sur tous les autres

Sur certains ordinateurs, j'ai trouvé que - la variable spécifique est effacée (c'est-à-dire que la liste est effacée par elle-même); qui cause l'outil pour lancer une exception.

Le même outil fonctionne bien dans toutes les conditions sur le reste des PC.

Si je compare ces quelques PC avec tous les autres, il n'y a pas de différence dans la RAM, OS, etc. Charger des tâches outil aussi et ses personnes à charge et les étapes aussi à l'utiliser sont tout aussi même.

Je suis intrigué par ce comportement étrange. L'autre problème pour moi est affecté PC et leur utilisateur sont situés dans différents pays. Donc, je ne peux pas vérifier manuellement les paramètres du PC ou peut déboguer. Je compte sur les journaux que je reçois.

L'un de vous a-t-il pu faire face à un problème similaire?

Pouvez-vous m'indiquer comment deux PC différents ayant la même configuration peuvent-ils se comporter différemment? Y a-t-il des dépendances de variables d'environnement, les paramètres du système, etc.

Cordialement, Sachin

+0

Vous devriez vérifier si peut-être les autorisations utilisateur diffèrent – Heslacher

+0

Qu'en est l'architecture du processeur? Avez-vous vérifié chaque endroit du code où cette liste est effacée? Pouvez-vous le remplacer par un 'ReadOnlyCollection', et voir si quelque chose efface la liste qui ne devrait pas être? En outre, "variable spécifique est effacée" - quelle variable, dans quelles circonstances? Il est très difficile de diagnostiquer sans aucun code source. –

+1

Voter pour fermer parce qu'à ce niveau de détail, les réponses ne peuvent être que spéculatives. Fournissez du code. – spender

Répondre

1

Personne ne peut répondre à votre requête avec la quantité limitée d'informations que vous avez donné. Cependant, je pourrais vous donner quelques conseils sur la façon de contourner le problème.

  1. débugguer Journaux - Ajouter les journaux à chacun de votre méthode avec des informations de paramètres. Plus votre journal est détaillé, plus vous trouverez facilement le bogue.
  2. Ajouter un gestionnaire d'erreurs pour envoyer l'exception avec la trace de la pile entière - pouvez-vous ajouter cette fonctionnalité car cela supprimera les maux de tête pour aller et collecter le journal manuellement. En outre, ce gestionnaire d'erreurs peut attacher le journal entier afin que vous obteniez le contexte complet dans l'email.
  3. analyse des journaux pour savoir quelle fonction échoue sur le paramètre
  4. Supprimer erreur de votre programme.
1

Cela peut-il être un problème de thread? Parfois, les machines avec un nombre différent de cœurs disponibles répondent différemment aux conditions de course.

0

Tout appareil peut être affecté par mémoire Randon émet, le stockage inconsistance et dans les machines Windows, le tristement célèbre windows registry peut contenir de nombreuses valeurs différentes qui peuvent influer sur la façon dont un programme est exécuté.

Je suggère que vous exécutez un outil fiable qui effectue des diagnostics de mémoire sur la machine qui fonctionne et les comparer à la machine qui ne fonctionne pas

Améliorer la logique dans votre outil, pour vérifier le contenu des variables et effectuer try/opérations de prises pour tenter de détecter la cause sous-jacente et connectez-vous ces erreurs pour diagnostiquer ce qui se passe

0

Il pense que vous devriez rechercher le problème sur paramètres régionaux/culture. Cette ligne "Autre problème pour moi est affecté PC et leur utilisateur sont situés dans pays différent." sonne une cloche que la variable a quelque chose à voir avec un double à chaîne et vice versa. La liste pourrait être interrompue par des exceptions d'analyse. Que se passe-t-il si vous affichez/enregistrez le Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator au démarrage.

Ensuite, vous devriez analyser un cultureinfo.

Par exemple:

CultureInfo usCultureInfo = new CultureInfo("en-US"); 

double result; 

if (!double.TryParse("0.231312", NumberStyles.Float, usCultureInfo, out result)) 
{ 
} 

Un autre problème pourrait être, est la bonne version .NET installée (profil complet/client)

0

Merci pour vos suggestions et des conseils précieux.

L'erreur est survenue en raison de CultureInfo étant différent. Cet exécutable lisait également le fichier XLS pour obtenir des données. En raison de la confusion dans les informations de culture, la lecture XLS n'a pas abouti, ce qui à son tour a corrompu quelques ensembles de variables.

Pour résoudre ce problème, j'avais 2 options: 1. Installez pack de langue MS Office 2. info de culture du changement dans le programme comme suit: CultureInfo = new CultureInfo ("en-US");

@M. Jeroen van Langen Spécial Merci à vous!

Cordialement, Sachin

Questions connexes