петък, ноември 02, 2007

Дебъгване

Как се дебъгва код, в който няма как да сложиш breakpoint и не знаеш каква грешка дава. Само знаеш кой е файла, който гърми... при това гърми така, че нищо в него не се изпълнява, така че print-ове не помагат. Това, което аз измислих беше, да оградя 99% от кода в

if (false){
// 99% от кода
}
да видя че този 1% работи и след това да местя if statement-а надолу постепенно разкривайки все повече код, докато го хвана къде се дъни.
Сега ми изглежда смешно, ама вчера хич не ми беше забавно :-(

Ако някой има по-добра идея как мога да постъпя следващия път в подобна ситуация, моля да сподели :-)

15 коментара:

  1. за местенето - трябва да е максимално оптимизирано, което ще рече постоянно делене на половинки за най-бърз резултат :)) това го прилагам в SQL-и преди всичко де :)))

    ОтговорИзтриване
  2. на какво е писано това нещо?

    без някакъв удобен механизъм да си ловиш и управляваш грешките просто не виждам начин изобщо да програмираш ;/

    ОтговорИзтриване
  3. Не питай... тъжна история ...

    ОтговорИзтриване
  4. добре де, средата не поддържа ли tracing ? Или само на мен това ми звучи по-нормално от това да базикаш кода ? А и между другото, не е ли по-лесно кода, който не ти трябва да го изкоментираш и после само да местиш началото на коментара ?

    ОтговорИзтриване
  5. Ами това е един измислен език, който е разширение на HTML с още тагове и чудесии, а за капак, бях набутала java код вътре. Специално темплейтите писани на този език, не могат да се дебъгват.

    А дали ще го закоментирам, или ще го оградя с if(false){}, май е почти един и също :-)

    ОтговорИзтриване
  6. Значи имаш ценен урок какво не бива да ти се случва вбъдеще като код :)

    ОтговорИзтриване
  7. Тоя урок ми отне 4 часа... а ако можеше да се дебъгва нормално, щеше да е 5мин....

    ОтговорИзтриване
  8. Понякога се налага да се работи в среда, каквато не е добра идея да се ползва... Примерно, съобразяване със стара CMS система, или нещо друго...

    Аз така преди време какви ли не еквилибристики правех, защото редактирах .shtml файлове (SSI), а всички файлове в CMS системата иначе бяха .php3 и да не ти казвам, как под SSI се пишат прости неща от рода на PHP еквивалентите на if {} else {} ;-)

    Е, накрая открих синтаксиса, де ... и позакърпих нещата, но си представям, ако трябваше да пиша нещо по-сложно... къв дебъг, кви пет лева... :)

    Така че -- случва се да не можем да си определяме сами средата.. и правим, каквото можем тогава... :)

    ОтговорИзтриване
  9. В подобни случаи printf() или подобна нему функция ти става пръв приятел - ползвам го вместо trace :) , за да видя къде точно се ми се дъни кодът. Ползвам го и в комбинация с if(0) или #if 0.

    ОтговорИзтриване
  10. print-a не вършеше работа, щото цялото нещо гръмваше и не принтираше абсолютно нищо :-(

    ОтговорИзтриване
  11. Добре дощла в света на http://worsethanfailure.com/

    ОтговорИзтриване
  12. аз харесвам try { ... } catch .. стига да има възможност. в javascript обичам: catch + alert(e) ..
    за останалото често ползвам print / echo "blah" и местя индикатора докато грешката не се появи първа ;)

    ОтговорИзтриване
  13. i v kraina smetka kak go debug tova neshto?

    ОтговорИзтриване
  14. Този коментар бе премахнат от автора.

    ОтговорИзтриване
  15. Помислих че пишеш на С/С++, но все пак да кажа:

    __asm int 3;

    Слагаш го където искаш да има break point.

    ОтговорИзтриване