Присоединение отладчика .NET при тихом обеспечении полезной входящей в систему смерти

надеюсь, что это поможет

   func getWiFiName() -> String? {
            var ssid: String?
            if let interfaces = CNCopySupportedInterfaces() as NSArray? {
                for interface in interfaces {
                    if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? {
                        ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String
                        break
                    }
                }
            }
            return ssid
        }

если это значение вернет ноль, то вы подключитесь через сотовую связь, если устройство подключено к Wi-Fi, тогда оно вернет имя Wi-Fi (SSID), не забудьте включить сеть расширения и доступ к информации Wi-Fi о возможностях проекта

ЭТО НЕ РАБОТАЕТ НА СИМУЛЯТОРЕ (ЭТО ДОЛЖНО БЫТЬ РЕАЛЬНЫМ УСТРОЙСТВОМ) !!!! и добавить эти два

import NetworkExtension

import SystemConfiguration.CaptiveNetwork

6
задан C. Broadbent 17 October 2008 в 10:07
поделиться

7 ответов

Как Paul Betts уже упомянул, Вы могли бы быть более обеспеченным использованием AppDomain. Событие UnhandledException вместо блока попытки/выгоды.

В Вашем обработчике событий UnhandledException можно регистрировать/отображать исключение и затем предложить опцию отладить, например, показать форму с деталями исключения и кнопками, чтобы проигнорировать, отладить или выйти.

Если пользователь выбирает параметр отладки, назовите Систему. Диагностика. Отладчик. Повреждение (), который позволяет пользователю присоединять безотносительно отладчика, который они хотят с полным стеком вызовов, все еще доступным.

Очевидно, Вы могли отключить эту опцию для любых сборок, Вы знаете, что никогда не собираетесь быть присоединением отладчика к.

class Program
{
    static void Main()
    {
        AppDomain.CurrentDomain.UnhandledException += ExceptionHandler;

        RunApp();
    }

    static void ExceptionHandler(object sender, UnhandledExceptionEventArgs e)
    {
        Console.WriteLine(e.ExceptionObject);
        Console.WriteLine("Do you want to Debug?");
        if (Console.ReadLine().StartsWith("y"))
            Debugger.Break();
    }

    static void RunApp()
    {
        throw new Exception();
    }
}
15
ответ дан 8 December 2019 в 13:03
поделиться

Почему Вы только не позволяете ему отказать и затем зарегистрироваться для получения Windows Error reports из Microsoft? Проверьте http://msdn.microsoft.com/en-us/isv/bb190483.aspx для деталей.

Если Вы не хотите делать это, можно использовать функцию IsDebuggerPresent (http://msdn.microsoft.com/en-us/library/ms680345.aspx), и если результатом является Ложь, вместо того, чтобы перенести код в выгоду попытки, добавьте обработчик событий к AppDomain. Событие UnhandledException (http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx)

1
ответ дан 8 December 2019 в 13:03
поделиться

Ужасно hacky, но без рычагов во время выполнения (я не знаю ни об одном), единственный способ добраться до стекового фрейма, откуда Вы бросаете....

Все исключения, которые, как известно, являются терминальные брошенный, должны были бы иметь следующее в своем конструкторе:

#if DEBUG
System.Diagnostics.Debugger.Launch()
#endif

Это представило бы диалог, разрешающий пользователю или предоставить соответствующий отладчик или выбрать не, и никакая отладка не произойдет (так или иначе, исключение закончит создаваться затем быть брошенным. Это очевидно только работает над исключениями, источником которых Вы управляете.

Я не рекомендую это, в, отладочная сборка с отладчиком присоединила Вас, может просто принять решение получить 'Первое Случайное' повреждение на броске исключения, который должен обычно быть достаточным к Вашим потребностям.

Другая опция состоит в том, чтобы начать генерировать мини-дампы программно на сайтах броска исключения, такие данные могли затем быть осмотрены позже с инструментом как windbg, но не вмешаться слишком много в желаемое поведение раскрутки исключения стек после.

Действие исключения, достигающего Вашего всеобъемлющего прерывания, является точно стеком, раскручиваются, Вы не хотите, извините. Если Вы довольны C++ и представляете себе его, Вы могли бы создать несовершеннолетнего (но комплекс для разбираний) ветвление моно, которые заставили все исключения инициировать отладчик. Кроме того, просто восстановите Класс исключений mono BCL, чтобы сделать то же, как детализировано выше..

2
ответ дан 8 December 2019 в 13:03
поделиться

Не должен просто делать a

Exception e1 = e;
LogException(e);
throw(e1);

в выгоде добиваются цели (по крайней мере, можно ли исследовать внешнее исключение)?

0
ответ дан 8 December 2019 в 13:03
поделиться

Можно получить информацию исключения путем записи в журнал трассировки:

        private static void Main(string[] args)
    {
        try
        {
            // ...
        }
        catch (Exception exception)
        {
            System.Diagnostics.Trace.Write(exception);
            #if DEBUG
            System.Diagnostics.Trace.Write("Waiting 20 seconds for debuggers to attach to process.");
            System.Threading.Thread.Sleep(20000);
            System.Diagnostics.Trace.Write("Continue with process...");
            #endif
            throw;
        }
    }

Используйте DebugView для отображения журнала трассировки. Остановка Потока в течение нескольких секунд даст Вам некоторое время для присоединения отладчика для обработки, не освобождая исходное исключение.

0
ответ дан 8 December 2019 в 13:03
поделиться

При строгом использовании Режима отладки для разработки и режима Release для развертывания Вы могли бы попытаться использовать Систему. Диагностика. Класс отладчика.

catch (Exception e) {
#if DEBUG
            System.Diagnostics.Debugger.Launch()
#endif
            LogException(e);
            throw;
        }
0
ответ дан 8 December 2019 в 13:03
поделиться

Если ни одно из глобальных событий не удается, то то, что Вы могли попробовать, помещает отчет об ошибках в любые события Ваши дескрипторы программного обеспечения. Простота их зависит от сложности Ваших приложений. Многие из приложения, записанного с платформой.NET, записаны для обработки событий, является ли это традиционным приложением или веб-приложением. Путем помещения рычагов в сами события необходимо смочь сохранить информацию в стеке, в котором Вы нуждаетесь.

0
ответ дан 8 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: