2010-09-02 2 views
0

Я использую VB Express 2008. Я знаю, как сказать, был ли код построен в отладке больше или выпущен, но теперь я хотел бы знать, как определить, работает ли он в среде Visual Studio или нет (чтобы я мог добавьте отладку MsgBox() и не волнуйтесь о них, если я когда-либо случайно отправлю отладочную версию).Как узнать, работает ли (VB) код внутри Visual Studio?

+0

Почему бы вам не попробовать Debug.Assert? - http://msdn.microsoft.com/en-us/library/kssw4w7z.aspx –

+0

потому что он «Проверяет условие, если условие ложно, отображает окно сообщения, которое показывает стек вызовов», и я не требуется стек вызовов. Проверка того, что работа в среде IDE достаточно проста в продуктах Borland, поэтому я надеялся, что это будет и в VS 2008 ... – Mawg

ответ

1

Is System.Diagnostics.Debugger.IsAttached что вы ищете?

+0

Что происходит, когда разработчик пытается отладить производственный код, запущенный на клиенте? Код изменяет пути и считает, что он запущен из VS IDE, используя ваше решение. Проверка прикрепленного отладчика ТОЛЬКО сообщает код, если подключен активный отладчик, а не если код находится в среде IDE во время разработки. – StarPilot

+0

Есть ли у вас лучшее решение, @StarPilot? Поскольку это был принятый ответ, похоже, было решением, которое OP искал ... – Guy

+0

Пока разработчик не отказался от использования vshost.exe, тогда код может проверить, включает ли его исполняемое имя vshost , Но можно отказаться от этого, поэтому он не гарантирует 100% точности. Проблема, как я уже отмечал выше, проверяет, что отладка - это гораздо больший набор возможностей, чем просто запуск в среде IDE. К сожалению, вне кода VSExtension нет 100% -ного способа определить, поддерживает ли IDE текущий код. – StarPilot

1

Если вы создаете Test и Prod, подумайте о том, чтобы использовать в своем коде директиву препроцессора.

#If DEBUG Then 
    MsgBox("Foo") 
#End If 

Это, конечно, упадет, если вы отправите двоичный код, построенный на основе отладки, в среду, отличную от dev. Я понимаю, что это атакует проблему под другим углом, откуда вы задали вопрос (IDE).

1

Попробуйте проверять IsAttached свойство System.Diagnostics.Debugger

+0

извините, но @guy избил его на одну минуту (+1, правда) – Mawg

1

Если вы хотите, чтобы убедиться, что вы никогда не показывают отладочные сообщения для пользователей, вы можете использовать Debug.Write() и Debug.WriteLine(). Эти команды выведут текст, предоставленный в окно вывода отладки. Обратите внимание, что вы можете атаковать окно вывода отладки в программу, выполняющую производственный код на машине клиента, без установки среды разработки!

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

Смежные вопросы