Я пишу приложение C# (в Linux с моно, но это не должно иметь значения), и я программирую с dll duplicati. Я хочу, чтобы программа никогда не вылетала, поэтому я пытался поймать каждое исключение. Проблема в том, что исключение выбрасывается, и я не могу его поймать. Может, из нитки?!?C# не удалось поймать все исключения
Sidenote: Только для целей тестирования я намеренно попытался выполнить резервное копирование в Место, где у меня нет разрешения. Если я дам разрешение, то я не получу ошибки.
код выглядит следующим образом:
try {
Interface i = new Interface(backend, options);
result = i.Backup(folders.ToArray());
} catch (Exception e) {
//Write to log.
//Here is no throw; !!
}
я получаю трассировку стека:
Error : System.Exception: Failed to retrieve file listing: Access to the path "/home/pi/test" is denied. ---> System.UnauthorizedAccessException: Access to the path "/home/pi/test" is denied.
at System.IO.Directory.GetFileSystemEntries (System.String path, System.String searchPattern, FileAttributes mask, FileAttributes attrs) [0x00000] in <filename unknown>:0
at System.IO.Directory.GetFiles (System.String path, System.String searchPattern) [0x00000] in <filename unknown>:0
at System.IO.Directory.GetFiles (System.String path) [0x00000] in <filename unknown>:0
at Duplicati.Library.Backend.File.List() [0x00000] in <filename unknown>:0
at Duplicati.Library.Main.BackendWrapper.ListInternal() [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at Duplicati.Library.Main.BackendWrapper.ListInternal() [0x00000] in <filename unknown>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
Почему я не могу поймать все исключения? Я делаю что-то неправильно?
Относительно не связанных друг с другом: некоторые исключения являются более исключительными, чем другие, например StackOverflow ... Вернуться к вопросу - стек действительно не соответствует показанному коду - так сложно предложить что-либо, но действительно исключения, брошенные на другой поток, не будут быть пойманным этим кодом. –
какая строка ошибка? –
Не все исключения подлежат возмещению. предположим, что это исключение происходит, оно вырывается из вашего кода и переходит к обработчику. где должна возобновиться ваша программа? – CThin