Как протестировать работу участка кода?

Тема в разделе "WASM.HEAP", создана пользователем device, 13 июл 2007.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Есть ли средства, с помощью которых можно посмотреть как работает тот или иной участок программного кода?
    К примеру, в void main() в строке с 1447 по строку 1613 происходит анализ определенной структуры данных и сжатие этих данных.

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

    Программа пишется с помощью IDE KDevelop.
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    у Intel есть такая прога, забыл только как называется. недавно ещё статью читал о тестировании проблемных учатков программ и об обнаружении этих участков, автор, кажется, Крис Касперски.
     
  3. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Только что нависла еще одна проблема: с памятью.
    Решил вывести на консоль содержимое буффера сжатия, чтоб посмотреть какие именно данные сжимаются в данный момент...
    Закончилась память. Кое-как процесс убил.

    И еще: Когда я делаю так:

    Код (Text):
    1. StringBuffer_ stb; // тут сжатый контент --- пусть по 512 байт входит в переменную BX
    2. ....
    3.  
    4. PUSH BX; // В стек
    5.  
    6. //дальше - крутиццо цикл, пока количество байтов не равно null:)
    7.  
    8. ...
    я получаю StackOverflow???
    С чем это может быть связано?

    Должно же быть средство для тестирования сего???
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    вот, нашёл прогу: Intel VTune и AMD Code Analyst (первая значительно более функциональная)
     
  5. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    RamMerLabs
    VTune юзал... Во-первых, коммерческая, а во-вторых - проц у меня не Intel и не Amd:dntknw:
    На счет CodeAnalyst слышал... не подскажешь, где взять?
    и еще:
    Может есть алгоритмы для просмотра работы проги во время исполнения? (ну, чтобы типа самому разобраться что да как...)
    Или кто знает, что такое StackOverFlow и по каким причинам это исключение возбуждается?

    Просто сроки давят, а задача - чтоб глюков не было ВООБЩЕ.

    Может быть кто-то знает, что происходит.
     
  6. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    должно быть на сайте AMD, я ей не пользовался.

    может подойдёт ещё Microsoft Profile.exe.
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Первая будет работать только на процессорах Интела, вторая — соответственно, AMD :)
     
  8. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    А для Sparc и Siemens ниче нет?
     
  9. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Linux?
     
  10. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    device
    Ну ты код привел, подтереться нечем. Как по такому куску можно понять причину переполнения стека?
    Две вещи интересны: как заполняется ebx и как организован цикл с push bx. Похоже в цикле стек и переполняется.
     
  11. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > Есть ли средства, с помощью которых можно посмотреть
    > как работает тот или иной участок программного кода?
    gdb
     
  12. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    kaspersky
    А если приложение не содержит отладочной инфы?

    Тут нужен некий хирургический инструмент

    t00x
    Solaris 10...
     
  13. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
  14. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Переполнение стека вызывающего потока. Многократное исполнение в цикле push ebx и подобного локального выделения памяти в стеке может вызвать StackOverflow, бесконечная рекурсия ну и т.д. Я юзал раньше Compuware BoundsChecker - софт для автоматического поиска ошибок таких как HeapOverflow, StackOverflow и т.д., а также софтина позволяет хукать функции в проге и анализировать их вызовы. Встраивается в Visual Studio. Насколько я знаю в никсах вообще мало развиты средства отладки и рилтайм-анализа.
     
  15. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    t00x
    У меня ограничение на объем проги стоит.
    То есть я для экономии даже стартпоинты не прописываю (e.g.: _somepoint:); - прога выполняется "Как есть".

    Люди подсказывают увеличить системные требования и юзать GNAT 2005...
    Есть такая штука как показатель загруженности стека: LoadFactor. Он указывает, в каких случаях требуется увеличивать размер по отношению к пределу загруженности.
    float LoadFactor = 0.75 (по умолчанию, но как-то его можно увеличить)
     
  16. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    device
    тёмный лес
    P.S. насколько понял у вас ограничены ресурсы
     
  17. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    device

    Я обычно вставляю

    _asm {int 3};

    код который нужно проанализировать

    _asm {int 3};

    но не забыть запустить SoftIce.

    Второй вариант
    DbgPrint(string, var1, var2 ....);
    при этом необходима к примеру чтобы читать вывод программа Марка Руссиновича DBGVIEW.EXE