Отладка сбоя с помощью valgrind

Предположим, у меня есть программа foo, которую я запускаю с foo bar. Теперь, если я запускаю его нормально, он работает нормально. Если я попытаюсь использовать:

valgrind --tool=massif foo bar

Он вылетает с повторением:

==10202== Warning: noted but unhandled ioctl 0x22 with no size/direction hints.          
==10202==    This could cause spurious value errors to appear.
==10202==    See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.

Тогда из среды моей программы:

[foo-14] process has finished cleanly              

Попытка:

valgrind --tool=massif xterm -e gdb -ex 'catch throw' -ex 'catch syscall 60' \
                                    -ex run --args foo bar

Это прекрасно работает.

Попытка:

valgrind --trace-children=yes --tool=massif xterm -e gdb \
                                    -ex 'catch throw' -ex 'catch syscall 60' \
                                    -ex run --args foo bar

Это заставляет gdb перехватывать ошибку внутри самого valgrind:

==10875== Process terminating with default action of signal 11 (SIGSEGV)
==10875==  Bad permissions for mapped region at address 0x4201000
==10875==    at 0x4201000: ???
==10875==    by 0x2A2C: ???
==10875==    by 0x2C5E7A643044BEFF: ???
==10875==    by 0x5F206F: ??? (in /usr/bin/gdb)
==10875==    by 0x2A2C: ???
==10875==    by 0x7DD472F: ???
==10875==    by 0x7DD4CCF: ???
==10875==    by 0x7CED17F: ???
==10875==    by 0x49D9BD: ??? (in /usr/bin/gdb)
==10875==    by 0x4A2344: ??? (in /usr/bin/gdb)
==10875==    by 0x5AD512: ??? (in /usr/bin/gdb)
==10875==    by 0x69DBC5: execute_command (in /usr/bin/gdb)

Наконец:

xterm -e gdb -ex 'catch throw' -ex 'catch syscall 60' \
             -ex run --args valgrind --trace-children=yes --tool=massif foo bar

Дает ошибка в окне gdb:

"/usr/bin/valgrind": not in executable format: File format not recognised

Итак, как мне лучше всего перехватить сбой при работе под valgrind? В качестве альтернативы, есть ли альтернативный инструмент, который будет отслеживать потребление памяти с течением времени в коде C ++?

0
задан 26 September 2019 в 04:58

0 ответов

Другие вопросы по тегам:

Похожие вопросы: