Прошедшее время в gdb

Прошедшее время в gdb

Есть ли способ измерить прошедшее время работы программы gdb?

Посмотрите на это:

<------------bp---------------------------------->

Предположим, что мы отлаживаем файл и в каком-то случайном месте устанавливаем точку останова. Теперь gdbмы что-то выполняем, а затем позволяем программе продолжить выполнение с помощью gdbкомандной строки ( run).

Мой вопрос здесь. Я хочу измерить прошедшее время с моментабппока программа не завершится успешно или не произойдет какая-либо ошибка.

Я предлагаю использовать .gdbinitфайл, и в этом файле вызывать некоторую функцию C для запуска таймера после runкоманды, а в конце выполнения мы также вызываем gettime()функцию C.

Итак, мой псевдокод немного похож на этот ( .gdbinitфайл):

break *0x8048452 (random place)
//start time
run
//get time

решение1

Самый простой способ сделать это (если ваш gdb поддерживает Python):

break *0xaddress
run
# target process is now stopped at breakpoint
python import time
python starttime=time.time()
continue
python print (time.time()-starttime)

Если ваш gdb не поддерживает Python, но может выполнять команды оболочки, то используйте это:

shell echo set \$starttime=$(date +%s.%N) > ~/gdbtmp
source ~/gdbtmp
continue
shell echo print $(date +%s.%N)-\$starttime > ~/gdbtmp
source ~/gdbtmp

В качестве альтернативы вы можете сделать вызов целевого процессаgettimeofdayиличасы_получитьвремя, но это гораздо более утомительно. Эти функции возвращают время, записывая в переменные в адресном пространстве процесса, которое вам, вероятно, пришлось бы выделить, вызвав что-то вроде malloc, и это может не сработать, если ваша точка останова остановила программу в середине вызова другой mallocили free.

Однако небольшая проблема с этим решением заключается в том, что строки continue и print result должны запускаться сразу друг за другом, иначе синхронизация будет неточной. Мы можем решить эту проблему, поместив команды в готовый скрипт через "define". Если мы запустим define checkTime, то gdb предложит нам ввести список команд. Просто введите любой из списков команд выше (python/shell), а затем вы сможете вызвать скрипт, просто используя команду checkTime. Тогда синхронизация будет точной. Кроме того, вы можете поместить , define checkTimeа затем список команд в ./gdbinitфайл, чтобы вам не пришлось вручную переопределять его каждый раз при запуске новой программы.

Связанный контент