В рамках перехода к другому облачному провайдеру мы обнаружили необходимость отладки нашего приложения. NET 2.1 в модуле Kubernetes (работает на mcr.microsoft.com/dotnet/core/aspnet: 2.1), который мне поручено изучить.
Наш движок CI в настоящее время собирается с "- c Release", но я заметил следующую формулировку https://devblogs.microsoft.com/devops/debugging-net-core-on-unix-over-ssh/ :
Для отладки есть два важных замечания. Во-первых, отладка кода, скомпилированного в розницу, намного сложнее, чем отладки, поэтому настоятельно рекомендуется использовать конфигурацию «Отладка». Если вам нужно использовать конфигурацию «Release», убедитесь, что вы отключили Tool-> Options-> Debugging-> Just My Code.
Я сделал Java дольше, чем хочу подумайте (где большая часть оптимизации происходит внутри JVM во время выполнения), но я незнаком с. NET, поэтому мне было интересно точно почему скомпилированный код выпуска сложнее отлаживать.
Это просто потому, что компилятор выполняет обычные трюки, такие как развертывание циклов, вычисление строковых выражений и т. Д., Или же под обложками происходят более глубокие преобразования? (Такие вещи, как я читал, что компилятор Intel C ++ может обмениваться двумя циклами, если это означает, что обход массива, выполняемый с ними, происходит с большей эффективностью кеша)