Основной вопрос отладки C ++ - PullRequest
4 голосов
/ 06 января 2010

Нужно ли мне обязательно изучать ассемблер для оптимального использования отладчика? Я заметил, что во время сеансов отладки я вижу эти загадочные коды и регистры процессора ... (eax ... бла-бла). Я предполагаю, что это сборка, и я должен как-то расшифровать причину проблемы из нее.

Есть ли какой-нибудь ярлык для понимания отладчика без необходимости изучения ассемблера?

PS: я видел книгу по сборке, которая была почти 1000 страниц, и у меня не хватило ума, чтобы просмотреть ее. Пожалуйста, помогите.
Отредактировано: **** Я использую codeBlocks ide. Но я думаю, что вопрос все еще стоит даже для MSVC ++

Ответы [ 8 ]

11 голосов
/ 06 января 2010

Хотя некоторые знания asm иногда могут оказаться очень полезными во время отладки, более ценная вещь, которую можно сделать в вашем случае, - правильно настроить символы отладки .

В случае gcc передайте ему флаг -g. В случае компилятора Visual Studio включите отладку генерации символов (да, даже для сборок выпуска) в настройках проекта. Если вы используете другой компилятор, прочитайте его документацию по этому вопросу.

И, наконец, что не менее важно, если вы работаете в Windows, рассмотрите возможность загрузки символов отладки для их двоичных файлов, поскольку это может сделать вашу жизнь намного проще. Найти их можно здесь: Сайт Microsoft

5 голосов
/ 06 января 2010

Похоже, элемент управления попал в библиотеку, источник которой у вас отсутствует или не был создан с отладочной информацией.

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

2 голосов
/ 06 января 2010

Вам не нужно быть экспертом в сборке, но я бы сказал, что понимание кода сборки важно для отладки. Найдите учебник "Достаточно просто сборки, чтобы пройти", например this .

2 голосов
/ 06 января 2010

Да. Для оптимальной отладки вы должны понимать ассемблер, который является не более чем языком, на котором говорит процессор.

Это не страшно. Языки программирования не становятся проще, чем ассемблер.

1 голос
/ 06 января 2010

Visual Studio в Windows или Отладчик отображения данных в Unix сделает очень приличную работу, если вы скомпилируете с символами отладки, и позволит вам шагать по коду C ++ без знания ассемблера. Знание имеющейся архитектуры машины, базовое понимание синтаксиса asm и того, как C ++ создает его, поможет вам еще дальше.

0 голосов
/ 06 января 2010

C ++ не требует, чтобы приложения хранили метаданные для облегчения отладки. И если такие метаданные не могут быть найдены, то отладчику не нужно много работать. Все, что он видит, - это машинный код, который выполняется, поэтому он должен вернуться к отображению простого кода сборки.

Однако компиляторы обычно могут создавать отладочную информацию, которую может использовать отладчик. Они в основном сообщают компилятору, как выглядит исходный код (или где найти исходные файлы), и какие инструкции соответствуют тем или иным строкам исходного кода, что позволяет вам отлаживать фактически написанный вами код C ++.

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

На GCC, насколько я могу вспомнить, вы должны скомпилировать с -g, чтобы сгенерировать отладочную информацию для использования GDB.

В Visual Studio это должно работать просто в большинстве случаев (хотя я считаю, что если вы запускаете «Пустой проект C ++», вы должны сами включить отладочную информацию в свойствах проекта)

0 голосов
/ 06 января 2010

Какая у вас платформа? VS2010 значительно улучшит процесс отладки.

0 голосов
/ 06 января 2010

Вам не нужно понимать ассемблер для эффективной отладки. Единственный раз, когда вам действительно нужно беспокоиться о коде ассемблера, это когда у вас возникают проблемы с оптимизацией, но даже тогда вам лучше иметь дело с кодом высокого уровня, чем пытаться написать более эффективную подпрограмму ассемблера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...