私のクラッシュ報告システムは、例外が処理されていない例外ハンドラに到達し、これを発生させたコードを調べると、これがどうなっているのかわかりません。コードは完全に同期しており、try/catch 。どの胴体がすべてを捕まえるか(catch(Exception ex))は本当にすべてを捕らえないのですか?
明確化:このコードは、Windows Phone 7の上で実行されていると例外が制御されていない環境(つまり、ユーザーのデバイス上]での生産で起こっている
は、ここでは、コードです:
private void LoadUserData()
{
try
{
UserData = UserData.Deserialize(UserDataFileName, true);
// We succeeded. Backup the file, if possible.
if (IsoFile.Store.FileExists(UserDataFileName))
{
try
{
IsoFile.CopyFile(UserDataFileName, UserDataFileBackupName);
}
catch (Exception ex)
{
EventManager.Current.ShipAssert("LoadUserData.Backup", ex);
}
}
}
catch (Exception ex)
{
string currentFile = "";
try
{
currentFile = IsoFile.ReadAllLines(UserDataFileName);
}
catch (Exception exInner)
{
currentFile = "Exception when trying to read file: " + exInner.ToString();
}
}
}
そして、これはUserData.Deserialize(それはテンプレートベースクラスからです)のためのコードである
System.InvalidOperationException: There is an error in XML document (129, 54). ---> System.InvalidOperationException: There is an error in XML document (129, 54). ---> System.Xml.XmlException: Unexpected end of file has occurred. The following elements are not closed: value, item, VotedUrls, UserData. Line 129, position 54. at
System.Xml.XmlTextReaderImpl.Throw(Exception e) at
System.Xml.XmlTextReaderImpl.Throw(Int32 res, String resString, String arg) at
System.Xml.XmlTextReaderImpl.Throw(Int32 pos, Int32 res, String resString, String arg) at
System.Xml.XmlTextReaderImpl.ThrowUnclosedElements() at
System.Xml.XmlTextReaderImpl.ParseElementContent() at
System.Xml.XmlTextReaderImpl.Read() at
System.Xml.XmlTextReader.Read() at
System.Xml.XmlReader.ReadEndElement() at
System.Xml.Serialization.XmlSerializationReader.DeserializePrimitiveElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue) at
System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget) at
System.Xml.Serialization.XmlSerializationReader.DeserializeElement(Accessor accessor, Fixup fixup) at
System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) at
SocialEbola.Shared.Utils.SerializableDictionary`2.ReadXml(XmlReader reader) at
System.Xml.Serialization.XmlSerializationReader.DeserializeSerializableElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue) at
System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget) at
System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean& firstElement) at
System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget) at
System.Xml.Serialization.XmlSerializationReader.DeserializeComplexElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue) at
System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget) at
System.Xml.Serialization.XmlSerializationReader.DeserializeElement(Accessor accessor, Fixup fixup) at
System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) at
System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream) at
SocialEbola.Lib.Serialization.SerializeHelper`1.Deserialize(Stream stream) at
SocialEbola.Lib.Serialization.SerializeHelper`1.Deserialize(String file, Boolean createNew) at
Fails.App.LoadUserData() at
Fails.App.Application_Launching(Object sender, LaunchingEventArgs e) at
Microsoft.Phone.Shell.PhoneApplicationService.FireLaunching() at
Microsoft.Phone.Execution.NativeEmInterop.FireOnLaunching() at
System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) at
SocialEbola.Shared.Utils.SerializableDictionary`2.ReadXml(XmlReader reader) at
System.Xml.Serialization.XmlSerializationReader.DeserializeSerializableElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue) at
System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget) at
System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean& firstElement) at
System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget) at
System.Xml.Serialization.XmlSerializationReader.D
:未処理の例外ハンドラに到達例外
public static T Deserialize(string file, bool createNew)
{
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
T result;
if (!store.FileExists(file))
{
if (createNew)
{
result = new T();
}
else
{
result = default(T);
}
}
else
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(file, FileMode.Open, store))
{
result = Deserialize(stream);
}
}
return result;
}
public static T Deserialize(Stream stream)
{
T t = (T)Serializer.Deserialize(stream);
return t;
}
シリアライザは次のように基底クラスで定義されています
public static XmlSerializer Serializer = new XmlSerializer(typeof(T));
+1 SocialEbola。私は社会的なウイルスが大好きです。 –
'UserData.Deserialize'メソッドを表示できますか?例外をスローする非同期処理を行うかもしれません。 –
@Shahar Prish貼り付けたコードからスタックトラックが発生していませんか? Visual Studioまたはスタンドアローンで実行していますか? – wal