логика callgrind поддерживает стек постепенно.Это означает, что он должен понимать соглашение о вызовах всего, что находится в стеке, обнаруживать вызовы и возвраты.
Вы можете сравнить с размотчиком valgrind и разматывателем gdb, используя gdb + vgdb.
Запустите valgrind с помощью: valgrind --vgdb-error = 0 --vgdb = full ....
Установите точку останова в коде C, вызываемом языком интерпретатора, и продолжите выполнение.
Когда встречается точка останова, сравните результат двух следующих команд gdb:
- backtrace
- monitor v.info scheduler
выше будет показано, работают ли разматыватели gdb и / или valgrind.
Вы можете попытаться понять, что делает callgrind, используя некоторые параметры отладки valgrind, например,
valgrind --tool = callgrind -v-v -v -d -d -d --ct-verbose = 3
(отрегулируйте nr -v / -d / verbosity на свой вкус).
И, конечно же,если у вас старая версия valgrind, вы можете попробовать последнюю версиюили даже git-репозиторий, даже если я сомневаюсь, что что-то недавно изменилось в этой области.