На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (5) « Первая ... 2 3 [4] 5  все  ( Перейти к последнему сообщению )  
> отладка приложения , отладчик он нужен или нет?
    Цитата Олег М @
    На практике 95% ошибок, можно и без отладчика найти, просто посмотрев код. А вот потоки, стек, память ведут себя в релизе и дебаге по-разному.

    Смотря какая программа и кто ее писал. У меня таких практик не было на работе. :-?

    Добавлено
    Цитата Олег М @
    А вот потоки, стек, память ведут себя в релизе и дебаге по-разному.

    По разному - это как? :scratch:

    Т.е. ты объявил динамический массив на 100 элементов - ожидаешь, что у тебя выделится память по 100 элементов, в дебаге и релизе будет по разному выделено или что?
      Цитата KILLER @
      По разному - это как?


      Выход за границы массива может проявляться в релизе, но не проявляться в дебаге.
      В потоках - любое изменение может повлиять на очерёдность исполнения потоков, очерёдность блокировок и т.д.

      Цитата KILLER @
      Смотря какая программа и кто ее писал.


      Не, в любых.
        Цитата KILLER @
        Что за прога такая - что меняет свой размер? Каким образом меняется размер приложения? Часто ты в релизе отключаешь оптимизацию и толкаешь пользователям?
        Речь как раз и шла о том, что в отладочной и в релизной версии из-за разных настроек компилятора/оптимизатора генерится разный код со всеми вытекающими, в том числе и разным размером исполняемого кода. Это вы не поняли, о чем шла речь и бросились бороться с плодом своих фантазий. К последнему вопросу: я оптимизацию не отключаю вообще. Если вы не в состоянии отлаживать оптимизированный код и вам для отладки приходится отключать оптимизацию - сочувствую.
          Цитата Олег М @
          Выход за границы массива может проявляться в релизе, но не проявляться в дебаге.

          А может проявляться в дебаге, но не проявляться в релизе. И что? :D

          Цитата Олег М @
          В потоках - любое изменение может повлиять на очерёдность исполнения потоков, очерёдность блокировок и т.д.

          Любое изменение чего? Когда косячишь с потоками, оно что в релизе, что в дебаге полбу стучит.

          Цитата Олег М @
          Не, в любых.

          Не в любых. В школьных и универовских микрозадачах - в большинстве случаев так и есть. А в реальности, 95% багов без отладчика, логов и трасировки нихрена ты даже не поймешь где стрельнуло. Ну вот тебе в 16 посте запостили код - чего ты не сказл "У тебя layout" нулевой, это ведь было очевидно даже по комментариям в коде. Можешь пройтись по темам, выбрать с 10 тем, и посмотреть сколько ты без отладчика сходу скажешь в чем ошибка и где. Это при том, что тут задачки в основном синтетические и упрощены до предела. так что в корне не согласен с эти высказыванием. В противном случае багтрекеры были бы не в моде нынче.

          Добавлено
          Цитата Dushevny @
          Речь как раз и шла о том, что в отладочной и в релизной версии из-за разных настроек компилятора/оптимизатора генерится разный код со всеми вытекающими

          Речь вообще шла о том, что отладчик нахрен не нужен, трейсы наше все. И были попытки привести когда он бесполезен. Я ЫукпШ'у сказал "ты еще приведи в качестве аргумента, что программу скомпиленную в релизе нельзя отладить", что он и привел. Я ему ответил - что для того чтоб отлаживать в релизе - нужно включить отладочную инфу, и еще можно отключить оптимизацию, если ты хочешь смотреть значения переменных. На что он начал приводить какие то баги при изменении размеров программы. Причем тут изменение размера программы вообще?

          Добавлено
          Цитата Dushevny @
          Если вы не в состоянии отлаживать оптимизированный код и вам для отладки приходится отключать оптимизацию - сочувствую.

          У меня вообще проблем с отладчиком нет. Это тут у некоторых многопоточность не отлаживается, и остальная муть.
            Цитата KILLER @
            А может проявляться в дебаге, но не проявляться в релизе. И что?


            То что и релиз ведут себя по-разному.

            Цитата KILLER @
            Любое изменение чего? Когда косячишь с потоками, оно что в релизе, что в дебаге полбу стучит.


            В случае грубых ошибок - да. Но в этом случае и отладчик не нужен.


            Цитата KILLER @
            Ну вот тебе в 16 посте запостили код - чего ты не сказл "У тебя layout" нулевой


            Потому что я не знаю, что такое layout. Поэтому посоветовал проверить всю цепочку и больше так не писать.
            Сообщение отредактировано: Олег М -
              Цитата Олег М @
              То что и релиз ведут себя по-разному.

              Могут, и что? А еще разрядность системы имеет значение и остальная муть. И что дальше?

              Цитата Олег М @
              В случае грубых ошибок - да. Но в этом случае и отладчик не нужен.

              Ок, а не грубые ошибки это какие? Сферические в вакууме, какие нибудь?

              Цитата Олег М @
              Потому что я не знаю, что такое layout. Поэтому посоветовал проверить всю цепочку и больше так не писать.

              Там по синтаксису понятно что layout это как минимум указатель. И как же ты не нашел ошибку такую простую? Ведь в 95% случаев без отладчика на глаз можно обнаружить.
              Сообщение отредактировано: KILLER -
                Цитата KILLER @
                Там по синтаксису понятно что layout это как минимум указатель. И как же ты не нашел ошибку такую простую? Ведь в 95% случаев без отладчика на глаз можно обнаружить.


                Единственно, что там понятно по синтаксису, что они там все указатели. Если бы они не были выстроены в одну цепочку, то и проблемы бы не возникло

                Добавлено
                Цитата KILLER @
                Ок, а не грубые ошибки это какие? Сферические в вакууме, какие нибудь?


                С lock-free алгоритмами ни разу не работал? Да и обычные дедлоки зачастую отловить не так-то просто
                Сообщение отредактировано: Олег М -
                  Цитата Олег М @
                  Единственно, что там понятно по синтаксису, что они там все указатели. Если бы они не были выстроены в одну цепочку, то и проблемы бы не возникло

                  Так погоди, ты же сам сказал что телепат 95 лвла. Теперь уже ты не можешь без отладчика сказать где ошибка. А что же случилось? В чем разница? Это какая то хитрая ошибка? На сколько помню еще в универе учат проверять указатели на Null перед использованием. Т.е. это целиком и полностью подпадает под 95% ошибок, которые на глаз ловятся. Как же ты не заметил то?

                  Добавлено
                  Цитата Олег М @
                  С lock-free алгоритмами не разу не работал? Да и обычные дедлоки зачастую отловить не так-то просто

                  Работал, как то у меня что в дебаге, что в релизе поведение было одинаковое.

                  Цитата Олег М @
                  Да и обычные дедлоки зачастую отловить не так-то просто

                  Где? В релизе или дебаге? Вот была у меня взаимоблокировка да еще с двумя сетевыми компонентами, в релизе ловил, отладчиком. Отловил. Без отладчика, трейсами - до второго пришествия бы ловил.
                    Цитата KILLER @
                    Так погоди, ты же сам сказал что телепат 95 лвла. Теперь уже ты не можешь без отладчика сказать где ошибка. А что же случилось? В чем разница? Это какая то хитрая ошибка? На сколько помню еще в универе учат проверять указатели на Null перед использованием. Т.е. это целиком и полностью подпадает под 95% ошибок, которые на глаз ловятся. Как же ты не заметил то?


                    Я ж вроде и сказал, где искать ошибку. Нет?

                    Добавлено
                    Цитата KILLER @
                    Где? В релизе или дебаге? Вот была у меня взаимоблокировка да еще с двумя сетевыми компонентами, в релизе ловил, отладчиком. Отловил. Без отладчика, трейсами - до второго пришествия бы ловил.


                    Там у меня пост есть, по поводу thread-safe shared_ptr. Найди в нём ошибку, хоть с отладчиком, хоть без
                      Цитата Олег М @
                      Я ж вроде и сказал, где искать ошибку. Нет?

                      Так погоди, ты во первых писал:
                      Цитата
                      На практике 95% ошибок, можно и без отладчика найти, просто посмотрев код.

                      Тебе дали код, почему ты не нашел ошибку без отладчика, просто посмотрев код? Причем там кода - с гулькин нос, чуть больше, чем в хело ворлде. А представь у тебя не синтаксическая ошибка, а логическая и программа не из 10 строчек, а из 100 000 строчек, и спенарий такой запареный, что в страшном сне не приснится(а так оно и бывает в 95% случаев) - как ты собрался искать без отладчика ошибку, если ты в 10 строчках ее не нашел?

                      Добавлено
                      Цитата Олег М @
                      Там у меня пост есть, по поводу thread-safe shared_ptr. Найди в нём ошибку, хоть с отладчиком, хоть без

                      А оно мне нужно?
                        Цитата KILLER @
                        Тебе дали код, почему ты не нашел ошибку без отладчика, просто посмотрев код?


                        Ну, очевидно, потому что я не знаю предметную область. Тем не менее я указал, что нужно сделать, чтоб найти ошибку.

                        Добавлено
                        Цитата KILLER @
                        А оно мне нужно?


                        Не знаю, смотри сам. Думаю, было бы полезно. А то одни пустые слова по тысячи запаренных строк.
                          Цитата Олег М @
                          Ну, очевидно, потому что я не знаю предметную область.

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

                          Цитата Олег М @
                          Тем не менее я указал, что нужно сделать, чтоб найти ошибку.

                          Можно было с таким же успехом сказать посмотри в отладчике. И? Вообще то у него даже в коде написано:
                          Цитата
                          ui->centralWidget->layout()->addWidget(&mCpuWidget); //<-- видимо тут что то не так

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

                          Добавлено
                          Цитата Олег М @
                          Не знаю, смотри сам. Думаю, было бы полезно. А то одни пустые слова по тысячи запаренных строк.

                          Я вообще то тебе вопрос задал, на что ты мне предложил найти багу в твоем коде. Зачем мне это? Нужно будет мне - буду искать багу в твоем коде. Пока мне это не нужно. Или думаешь ты тут полные слова пишешь, а я пустые? :scratch:
                            Цитата KILLER @
                            Я вообще то тебе вопрос задал, на что ты мне предложил найти багу в твоем коде. Зачем мне это? Нужно будет мне - буду искать багу в твоем коде. Пока мне это не нужно. Или думаешь ты тут полные слова пишешь, а я пустые?


                            Не хочешь, не ищи, мне по-барабану. Но до того, извини, буду думать что я полные слова пишу, а ты пустые.
                              Цитата Олег М @
                              Не хочешь, не ищи, мне по-барабану. Но до того, извини, буду думать что я полные слова пишу, а ты пустые.

                              Фи, думай что хочешь. У меня свое мнение на этот счет.
                                Цитата Cfon @
                                я не силен пока в Qt что там не так с layout() вроде как возвращает null.

                                Цитата Cfon @
                                Может быть там перед вызовом layout Нужно вызвать addlayout ? Хотя я в qt тоже не силен, так чисто, предположение.


                                У каждого виджета есть ссылка на свой лайаут:
                                Цитата
                                QLayout *QWidget::layout() const
                                Returns the layout manager that is installed on this widget, or 0 if no layout manager is installed.
                                The layout manager sets the geometry of the widget's children that have been added to the layout.

                                Задается лайаут методом void QWidget::setLayout(QLayout *layout)

                                Таким образом, до помещения виджета в качестве центрального, с помощью void QMainWindow::setCentralWidget(QWidget *widget) - этот виджет должен быть построен заранее. Естественно, если он содержит дочерние элементы (виджеты), они так же должны быть построены заранее и помещены в лайаут(ы). Ну и конечно же важна последовательность построения.

                                Небольшой примерчик

                                ExpandedWrap disabled
                                  MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)  {
                                    QWidget *W = new QWidget();
                                    QLabel *Label = new QLabel("Enter string:");
                                    QLineEdit *Edit = new QLineEdit();
                                    QPushButton *Ok = new QPushButton("Ok");
                                    QPushButton *Cancel = new QPushButton("Cancel");
                                    QHBoxLayout *H1 = new QHBoxLayout();
                                    QHBoxLayout *H2 = new QHBoxLayout();
                                    QVBoxLayout *V = new QVBoxLayout();
                                    H1->addWidget(Label);
                                    H1->addWidget(Edit);
                                    H2->addStretch();
                                    H2->addWidget(Ok);
                                    H2->addWidget(Cancel);
                                    V->addLayout(H1);
                                    V->addLayout(H2);
                                    W->setLayout(V);
                                    setCentralWidget(W);
                                    resize(320,96);
                                  }


                                В результате получится окошко (ничего не делающее, просто отрисовка):

                                user posted image

                                Ну и еще замечание ... Почему я нигде не задаю "родителя" при создании элемента? Дело в том, что методы типа addWidget, addLayout, setCentralWidget ... сами это прописывают. В результате последующего разрушения родительского виджета - все дочерние виджеты и размещения автоматом предварительно разрушаются.

                                Добавлено
                                ЗЫ: В примере можно было не городить вложенные размещения, а выбрать какой-нить другой "размещатель", например, QGridLayout. Но я специально сделал так, чтобы была более наглядна последовательность построения.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0620 ]   [ 17 queries used ]   [ Generated: 19.04.24, 16:14 GMT ]