2015-11-19 2 views
0

Это довольно общий вопрос.Почему мой код разбился?

Если у вас есть программа с множеством строк кода, допустим, C++. Durring компиляция все работает нормально, никаких предупреждений нет ошибок. Но во время выполнения программы внезапно зависает, что приводит к сбою.

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

Существуют ли какие-либо методы или профилировщики, отслеживающие текущую строку выполнения программы?

+5

Voila! Вы только что спросили мир об отладчиках. – therainmaker

+2

Как вы знаете, как использовать тег 'debugging', но вы никогда не слышали об отладке? – user463035818

+1

Если переполнение стека положил туда этот «отладочный» тэг, то он является кандидатом на тест Тьюринга. Если это не так, ваш вопрос будет риторическим. – Bathsheba

ответ

1

Ваш вопрос слишком широк, и ответа нет. В общем, ошибка у вас (не подозревайте, что сначала компилятор или реализация ошибаются, почти всегда вы ошибаетесь, а не система!).

Во-первых, внимательно прочитайте об Halting Problem и Undecidable Problem.

Затем, пожалуйста, будьте предельно осторожны с кодом undefined behavior (UB) в своем коде (не все из них дают segmentation faults, см. this). C++ (& C) кода может быть много. Некоторые языки (Haskell, Scheme, Common Lisp ....) лучше указаны и имеют намного меньше UB.

В частности,

  • включить все предупреждения и отладочную информацию в вашем компиляторе, поэтому компилировать с g++ -Wall -Wextra -g при использовании GCC (или также с Clang/LLVM). Иногда вы будете счастливы использовать некоторые дезинфицирующие средства, например. скомпилировать с some -fsanitize= флагами.

  • узнать, как использовать отладчик (например gdb), а также valgrind

  • узнать гораздо больше о C++, так как это сложный язык.

  • понимать и следовать правилам и правилам кодирования (например, rule of 5).

  • быть любопытным и узнать много других языков и понятий (так читайте SICP и узнайте Схему).

Для изучения программирования вам понадобится ten years, поэтому будьте терпеливы.

PS. Мой предвзятый совет - установить Linux на свой ноутбук.

+0

спасибо, что я смотрел после «valgrind» и вида – user3085931

+1

Этого недостаточно. Вам нужно понять семантику C++ и вашей программы, и это действительно сложно. И вы также должны использовать 'gdb' –

+0

Я не так уж и новичок. Мне просто нужно приблизиться к тому, где проблема возникает вообще – user3085931

Смежные вопросы