LINUX.ORG.RU

valgrind: как его использовать-то?


0

0

Что-то не могу разобраться как с этим зверем-то работать? В частности, не ясен его вывод и где он ошибки углядел. Вот, к примеру:

==11361== 125 errors in context 25 of 51:
==11361== Conditional jump or move depends on uninitialised value(s)
==11361==    at 0x80D1A9D: MenuCreator::createWindowMenuItem(std::string const&, std::string const&, FbTk::Menu&) (basic_string.h:2099)
==11361==    by 0x80D65ED: MenuCreator::createMenuType(std::string const&, int) (new_allocator.h:62)
==11361==    by 0x807DE4E: BScreen::initMenus() (new_allocator.h:62)
==11361==    by 0x806A608: Fluxbox::initScreen(int) (fluxbox.cc:464)
==11361==    by 0x806D3D2: Fluxbox::Fluxbox(int, char**, char const*, char const*) (stl_vector.h:462)
==11361==    by 0x80787AB: main (basic_string.h:1456)

Что бы это могло значить? Есть где объяснение?

Использую слегка старую версию -- 2.4.0, но скоро новую попробую. Запускал с ключами -v --leak-check=full
★★★★★

используешь неинициализированное значение, файлы и номера строк он пишет, смотри свои файлы, скорее всего это fluxbox.cc:464

Reset ★★★★★
()

> ==11361== Conditional jump or move depends on uninitialised value(s)

Как правило, valgrind выдаёт подобные ошибки для кода, собранного с оптимизацией (типа -O2). Если есть возможность, полезно пересобрать с -O0 -g.

ero-sennin ★★
()
Ответ на: комментарий от Keiko

IMHO лучше вначале тестить с --tool=memcheck, и если ошибок не будет уже извращаться с остальными ключами, а то так сразу слишком много инфы будет, замучаешься её обрабатывать

Reset ★★★★★
()

Спасибо, вам, друзья!

Я тут в гугле нашел две статьи (правда, на английском). Уже одну из них прочитал и начал понимать, что он имел ввиду ;))

Вот ссылки, авось кому тоже пригодятся:

http://www.cprogramming.com/debugging/valgrind.html http://www.linuxjournal.com/article/7930

php-coder ★★★★★
() автор топика
Ответ на: комментарий от ero-sennin

>Как правило, valgrind выдаёт подобные ошибки для кода, собранного с оптимизацией (типа -O2). Если есть возможность, полезно пересобрать с -O0 -g.

Упс. Не знал. Этот файл был собран с -O2 -g Спасибо за совет, попробую с -O0 пересобрать.

Т.к. как я понял таких ошибок что ли вообще не будет? Как так что они только при включении оптимизации-то появляются ?

php-coder ★★★★★
() автор топика
Ответ на: комментарий от Keiko

>ещё ключи посмотри.

Посмотрел. Пока использую:

valgrind -v --leak-check=full --log-file=tmp/valgrind.log

Но вот в статье еще про --show-reachable=yes говорят..

>valgrind -v --tool=addrcheck --show-reachable=yes --leak-check=full ./progr

Я пока проверял на память. А вот, что делает addrcheck ? Был бы рад услышать объяснение на русском =)

Спасибо.

php-coder ★★★★★
() автор топика
Ответ на: комментарий от php-coder

memcheck: among other things, performs fine-grained validity and addressibility checks of every memory reference performed by the program

addrcheck: performs lighterweight addressibility checks of every memory reference performed by the program

Короче, addrcheck это облегчённая версия memcheck, и работает гораздо быстрее. Если памяти мало, лучше использовать addrcheck. Если хватает (>256 Mb) - то лучше memcheck.

Keiko
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.