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