Более того DevPartner позволяет выявлять deatlock'и в многопоточных программах, и делает это достаточно эффективно.Сообщение от Vladimir Kladov
Более того DevPartner позволяет выявлять deatlock'и в многопоточных программах, и делает это достаточно эффективно.Сообщение от Vladimir Kladov
Ну, бесплатный - только сыр в мышеловке. Делфи - тоже платный продукт. И любой софт для разработки под альтеру - тоже (и не малых денег стоит).Сообщение от Vladimir Kladov
Проект на паскале, но какая разница. Метод паттернов не проходит. Проверялось и другими средствами, которые заполняют все паттерном. (Не пойму только, а при чем тут MSR'ы всякие? Какой с них толк - если это всего лишь средство получить информацию о возможностях аппаратуры). Там ошибка очень глубокая, наведенная. И наверняка даже не моя, а в одной из библиотек графики. Криворукие программисты, говорите? Вы попробуйте написать 100000 сток кода, и чтобы без ошибки, а я посмотрю. Хорошая ошибка - это которая сразу приводит к сбою. Но есть плохие ошибки. Функция отрабатывает нормально, ничего не происходит. На первый взгляд, и на второй и на десятый. Но где-то в памяти делает что-то не то. И спустя минуты долгого выполнения другая функция в другом месте начинает обращаться к данным, а они какие-то не те. Все случаи предусмотреть нельзя, и прога с грохотом падает. Попробуй теперь догадайся, которая из 10000 функций что-то не учитывает. Это не кривые руки программистов. Это ленивое железо + принцип "программисту доступно все". Я считаю, что сейчас на разработку ПО приходится вбухивать все больше средств и времени и сил - только потому, что слишком много экономии на разработке железа. "Мы не будем делать паровоз, вот вам 100 лошадей, скачите куда хотите". Так получается.
Читайте первоисточник (мануал по процессору от интела том 3 (с сайта интела)), а не русский перевод непонятно кого. В области регистров MSR есть область из 16-32х регистров, которые запоминают последние 16-32 перехода (все виды переходов call/jmp/int и т.д.), просто так этим воспользоваться не удастся, т.к. обработчик исключения Page Fault в первую очередь должен сохранить значения этих регистров (в противном случае в них запишутся переходы, которые происходят внутри обработчика).Сообщение от Vladimir Kladov
Ну на счет 100000 строк кода я могу сказать только одно, что на компьютере код отлаживать намного легче, чем например во встроеной системе на TMS (у которого защиты памяти вообще нету) и кроме JTAG эмулятора нет никаких средств общени с внешним миром (ни монитора ни клавиатуры).
Я разрабатываю драйверы режима ядра (для систем на ядре NT) и исходников там порядка 1Мб, однако мне это не мешает находить и исправлять ошибки. Большинство ошибок можно исправить исходя из чисто теоретических принципов. Остальные с помощью контролирующего кода (assert'ов) и всяких там дебагеров и средств типа баундс чекера.
Понятное дело, что код без ошибок написать очень сложно, но для этого и существуют всякие разные приемы отладки, чтобы исправлять ошибки в том числе и трудноуловимые.
Последний раз редактировалось deathsoft; 26.01.2007 в 20:52.
Ну и какой обычному разработчику (не уровня ядра) от этих регистров, если он может ими воспользоваться. Ошибки ошибками, но есть еще преднамеренный вредоносный код, от которого на x86 не убежать, не спрятаться. Стек программе доступен всегда как адресуемой пространство. В том же самом стеке лежат и адреса возвратов, и локальные переменные, и параметры. Метод паттернов здесь не поможет. Кроме естественных ошибок, появляется возможность найти редкий случай сочетания входных данных и переполнением буфера выполнить код, который никогда не должен был бы выполниться, в случае нормальном. Архитекутура, в которой стеки разделены, и не адресуются как обычная память, исключает такую возможность напрочь.
Ну, вообще метод патернов со стеком отлично помогает, делается проверка стека после каждого вызова функции, аналогично выявляются непроинициализированные переменные и налезание стека на код.Сообщение от Vladimir Kladov
В новых x86 есть бит защиты страниц, который разрешает/запрещает выполнение кода с этой страницы, для стека стасятся атрибуты RW, для данных тоже RW, для кода RX, при этом запись в страницы с кодом тутже приводит к исключению, а также попытка выполнени данных и стека.
Кстати на x86 есть возможность защиты стэка, кода и данных, практически как в компьютерах с гарвардской архитектурой - это использование сегментной модели, когда у каждого сегмента задается его адрес и размер, тогда при переполнении стека вырабатывается исключение Stack Fault. Это никто не использует, потому что компилятор под сегментную модель писать в 100 раз сложнее, поэтому везде и используют упрощенную - FLAT модель. В своей тестовой многозадачной ОС, которую я писал на ассемблере я использовал защиту уровня сегментов и все 3 кольца защиты (как раз дл того чтобы посмотреть какие преимущества это дает), защищенность от ошибок повышается в разы, но компиляторов поддерживающих это нет, а из ОС только OS/2 поддерживала уровни привелегий 0, 2 и 3, все остальные ОС поддерживают только 0 и 3.
Так это не проблема железа, а проблема кривых инструментальных средств, которые не поддерживают аппаратуру на которой работают. Тотже отладчик SoftIce поддерживал MSR регистры, но только LastBranchFromIp и LastBranchToIp.Сообщение от Vladimir Kladov
Всего стека? В каждом потоке? Ну вы меня умиляете. Я же говорю: до возникновения ошибки придется запускать прогу на несколько суток тогда.
Проверять после вызова придется всю память, принадлежащую задаче. Я о том и толдычу, что это нереалистично.
И потом, представьте себе идеальный мир. Прогу можно написать сразу так, что если в пределах защищенного блока произойдет ошибка, то прога не слоамется, а просто сообщеит, что данный участок данных сбойный, и пропустит его, и дальше пойдет. А может и не сообщать, просто в журнале фиксировать - если задача такая. А сейчас - будьте добры увидеть, что "программа выполнила недопустимую операцию", и полчаса ваших прежних ожиданий накрылись медным тазом. И будьте добры сами методом исключения (например) найти тот кусок данных, который роняет прогу, и удалить их из набора. Пример абстрактный, но характеризует нынешнее положение дел в полной мере. Разработчики даже не пытаются предусмотреть восстановление после сбоя, потому что сбой однозначно испортит общую кучу, доступную всей программе с едиными правами, и дальше пытаться выполнять что-либо просто бессмысленно: восстановление невозможно.
Нет, конечно, можно организовывать для каждой мелкой задачки свой собственный процесс (упало - главный процесс перезапускает ведомый), но - накладно получается, тормозить будет, причем сильно тормозить.
Ну вот, получил я Quartus II 6.1. Пока не понял, пойдет ли он с лицензией Web Edition, буду сейчас пробовать.
Ага, вроде идет. Expiration date: 27-Jun-2007. На полгода, то есть. Через полгода новую дадут, если от имени той же сетевой карты / пользователя просить, кто в курсе, скажите.
Пойду туториал "полистаю"![]()
дают, хотя проще вылечить, в qartus отладчик убогий, можно сказать его там нет.
Последний раз редактировалось ZEK; 27.01.2007 в 20:51.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)