Есть ли средства, с помощью которых можно посмотреть как работает тот или иной участок программного кода? К примеру, в void main() в строке с 1447 по строку 1613 происходит анализ определенной структуры данных и сжатие этих данных. Мне интересно, какая часть алгоритма выполняется в данный момент (будь то условие или цикл)... Может кто сталкивался с этой проблемой. Программа пишется с помощью IDE KDevelop.
у Intel есть такая прога, забыл только как называется. недавно ещё статью читал о тестировании проблемных учатков программ и об обнаружении этих участков, автор, кажется, Крис Касперски.
Только что нависла еще одна проблема: с памятью. Решил вывести на консоль содержимое буффера сжатия, чтоб посмотреть какие именно данные сжимаются в данный момент... Закончилась память. Кое-как процесс убил. И еще: Когда я делаю так: Код (Text): StringBuffer_ stb; // тут сжатый контент --- пусть по 512 байт входит в переменную BX .... PUSH BX; // В стек //дальше - крутиццо цикл, пока количество байтов не равно null:) ... я получаю StackOverflow??? С чем это может быть связано? Должно же быть средство для тестирования сего???
RamMerLabs VTune юзал... Во-первых, коммерческая, а во-вторых - проц у меня не Intel и не Amd На счет CodeAnalyst слышал... не подскажешь, где взять? и еще: Может есть алгоритмы для просмотра работы проги во время исполнения? (ну, чтобы типа самому разобраться что да как...) Или кто знает, что такое StackOverFlow и по каким причинам это исключение возбуждается? Просто сроки давят, а задача - чтоб глюков не было ВООБЩЕ. Может быть кто-то знает, что происходит.
device Ну ты код привел, подтереться нечем. Как по такому куску можно понять причину переполнения стека? Две вещи интересны: как заполняется ebx и как организован цикл с push bx. Похоже в цикле стек и переполняется.
> Есть ли средства, с помощью которых можно посмотреть > как работает тот или иной участок программного кода? gdb
kaspersky А если приложение не содержит отладочной инфы? Тут нужен некий хирургический инструмент t00x Solaris 10...
Переполнение стека вызывающего потока. Многократное исполнение в цикле push ebx и подобного локального выделения памяти в стеке может вызвать StackOverflow, бесконечная рекурсия ну и т.д. Я юзал раньше Compuware BoundsChecker - софт для автоматического поиска ошибок таких как HeapOverflow, StackOverflow и т.д., а также софтина позволяет хукать функции в проге и анализировать их вызовы. Встраивается в Visual Studio. Насколько я знаю в никсах вообще мало развиты средства отладки и рилтайм-анализа.
t00x У меня ограничение на объем проги стоит. То есть я для экономии даже стартпоинты не прописываю (e.g.: _somepoint; - прога выполняется "Как есть". Люди подсказывают увеличить системные требования и юзать GNAT 2005... Есть такая штука как показатель загруженности стека: LoadFactor. Он указывает, в каких случаях требуется увеличивать размер по отношению к пределу загруженности. float LoadFactor = 0.75 (по умолчанию, но как-то его можно увеличить)
device Я обычно вставляю _asm {int 3}; код который нужно проанализировать _asm {int 3}; но не забыть запустить SoftIce. Второй вариант DbgPrint(string, var1, var2 ....); при этом необходима к примеру чтобы читать вывод программа Марка Руссиновича DBGVIEW.EXE