Для отладки программы на C ++ в DLL нужно хранить много дополнительной информации, чтобы отладчик мог узнать о коде во время выполнения. В C ++ нет требований времени выполнения, чтобы иметь возможность проверять код в отличие от C #, что позволяет проводить расширенную проверку во время выполнения, также известную как рефлексия. Эта информация есть в C # независимо от того, используется ли режим отладки или выпуска.
Кроме того, C ++ обычно компилируется непосредственно в машинный код в режиме выпуска, цель компилятора - максимально оптимизировать код, например. удалить любую и всю постороннюю информацию и код. В C # компилятор компилируется в псевдокод, который как раз вовремя компилируется по мере необходимости. Этот код сохраняет большую часть того, что требуется для отладки, независимо от того, является ли он версией выпуска или отладки, которую вы строите. Настолько, что можно написать декомпилятор, который вернет вам код из сборки во время выполнения.