Я бы выстроил числа, где строится вектор v и когда вызывается функция size () вектора.
В GDB нет простого способа сделать это, но вы можете использоватьobjdump -d
чтобы получить адреса CALL
инструкций.Пример: использование вашей программы, добавление отсутствующего #include <assert.h>
и построение его с помощью:
$ gcc -g t.cc -fno-pie -no-pie
$ objdump -dC a.out | grep 'call.*>::vector'
4011da: e8 f9 00 00 00 callq 4012d8 <std::vector<unsigned long, std::allocator<unsigned long> >::vector(unsigned long, unsigned long const&, std::allocator<unsigned long> const&)>
$ objdump -dC a.out | grep 'call.*>::size'
4011f2: e8 8f 01 00 00 callq 401386 <std::vector<unsigned long, std::allocator<unsigned long> >::size() const>
Теперь, когда вы знаете адреса инструкций CALL
, вы можете перевести их в функцию / файл / строку, используя addr2line
:
$ addr2line -fe a.out 4011da 4011f2
main
/tmp/t.cc:9
main
/tmp/t.cc:10 (discriminator 1)