Ярлык называется «Связанный символ» в ключевой карте. На Mac по умолчанию используется Ctrl + Cmd + Up, в Windows / Linux - в Ctrl + Alt + Home.
По причинам... хорошо, некоторая подсказка признака помогла бы. Одна возможность состоит в том, что у Вас есть код к методу как Debug.WriteLine
, который имеет побочные эффекты (т.е. заставляет его работать). Вызовы к методам, отмеченным с [Conditional(...)]
, не компилируются, если Вам не определили правильные символы - таким образом, что-либо отметило [Conditional("DEBUG")]
, будет тихо отброшен.
Это могла также быть ошибка компилятора, но это немного маловероятно (но не невозможно).
, Каков признак? Как это повреждается?
Как пример вышеупомянутого:
static string Bar { get; set; }
static void Main()
{
Bar = "I'm broken";
Debug.WriteLine(Foo());
Console.WriteLine(Bar);
}
// note Foo only called in DEBUG builds
static string Foo()
{
Bar = "I'm working";
return "mwahahah";
}
Скомпилированный в Режиме отладки это печатает, "я работаю"; скомпилированный в режиме RELEASE это печатает, "я повреждаюсь". Это звучит подобным? Проверьте, что Вы не называете методов отладки непосредственно с вещами, которые имеют побочные эффекты. В большинстве случаев можно зафиксировать косвенно:
string foo = Foo();
Debug.WriteLine(foo);
Теперь это называют в любом режиме.
Это могло бы быть своего рода состояние состязания, которое Вы имеете, если Вы не работаете в однопоточном коде. Например, если некоторая часть Вашей программы должна выполнить некоторые действия, прежде чем другие части смогут получить доступ к нему, это могло бы перестать работать в режиме выпуска просто, потому что к коду получают доступ слишком рано. У нас когда-то была подобная проблема с некоторым кодом для мобильных телефонов, которые хорошо работали в эмуляторе, но по телефону который был медленнее, sitution не был тем же вообще.
Я видел синхронизацию, которые вызывают проблемы между Отладочной сборкой и Сборкой конечных версий. Вообще Отладочная сборка работает медленнее, чем Сборка конечных версий. Вы могли бы хотеть проверить строго ограниченный во времени раздел своего кода.
Вы попробовали включая файлы отладки? (pdbs)
, Если Вы co идете свои настройки проекта и затем компиляция 'вкладка', выбирают Вашу сборку конечных версий в выпадающей близости вершина, затем выбирают усовершенствованные опции компиляции около нижней части, удостоверьтесь, что установили его для создания ПОЛНОЙ отладочной информации, затем повторно развернитесь, необходимо теперь получить более подробную информацию о причине катастрофического отказа.
Можно попытаться выключить, Оптимизируют Код в Настройках Сборки. Что является фактической ошибкой, Вы добираетесь.
Другая вещь, которую можно сделать, скомпилировать в режиме выпуска, но включить #Debug условное выражение. Это обработает случай если Ваша Диагностика использования. Отладка и код там производят Ваше приложение.
У меня была аналогичная проблема. Моя ситуация такая: Я определил некоторые функции отражения в библиотеке классов A. Затем я определил библиотеку пользовательских элементов управления WPF B, которая использует функции из библиотеки A. Затем я закодировал приложение, которое использует пользовательский элемент управления из библиотеки B и функции в библиотеке A. Когда я использовал отладочную версию библиотеки B, работает нормально. Но когда я использовал релизную версию библиотеки B, функции отражения не работали. Я также определил другие функции в библиотеке A. Кажется, проблемы вызывают только функции отражения. Не могу понять причину. В конце концов, я сдался и переместил функции отражения из библиотеки A в библиотеку B. И это сработало.
В какой-то момент у меня была проблема с финализаторами, срабатывающими раньше, чем ожидалось, потому что я не полностью понимал взаимодействие между финализаторами, сборщиком мусора и тем, когда локальный объект считается собираемым ( подсказка: дело не в закрывающей фигурной скобке блока). Если в вашем коде используются финализаторы, вы можете изучить GC.KeepAlive (). В следующем блоке:
void MyFunction()
{
Foo f = new Foo();
SomeFunction(f.SomeProp);
}
f
становится подходящим для завершения до того, как SomeFunction ()
даже запустится! Если финализатор сделает что-то вроде удаления всего, что SomeProp
выдал, у вас могут возникнуть проблемы. Добавление вызова GC.KeepAlive (f)
после вызова SomeFunction
гарантирует, что f
не подлежит завершению до завершения вызова KeepAlive ()
.
Редактировать: После всего этого я забыл указать, что эта проблема была гораздо более выраженной при работе в режиме Release. Я не знаю, помещает ли сборка Debug неявные KeepAlives для локальных пользователей в конце функции для удобства отладчика, или сборка мусора просто менее агрессивна, или что-то еще, но в моем случае режим Release значительно усугубил эту проблему.
Вы, наверное, знаете это, но, переменные иногда инициализируются по-разному в сборках отладки и выпуска. Например Я думаю, что переменные автоматически инициализируются в отладочных сборках VC6, это может скрыть проблемы, если вы что-то не инициализировали. Я также думаю, что массивы отладки могут использовать сторожевые байты в попытке указать на переполнение. Это тоже может привести к другому поведению.