LINUX.ORG.RU

GDB, watchpoints

 


0

2

привет!

падает некоторый код по SIGSEGV. в коде используется asio.

последний фрейм выглядит так: #0 0x0000000003cb255f in ?? ()

предпоследний, так: #1 0x0000000000d072a8 in boost::asio::detail::task_io_service_operation::complete (this=0x3c64140, owner=..., ec=..., bytes_transferred=63653072) at /usr/local/include/boost/asio/detail/task_io_service_operation.hpp:38

и указывает сюда: https://github.com/boostorg/asio/blob/develop/include/boost/asio/detail/task_...

судя по всему, `func_` указывает на какой-то висячий адрес. адрес `func_` равен 0x3c395df. далее, чтоб понять на что привязан `func_`, пытаюсь установить `awatch` на этот адрес, так: awatch *(int*)0x3c395df

дебагер останавливается на этом ватчпоинте, и говорит такое:

(rr) bt
#0  0x0000000070000002 in ?? ()
#1  0x00007f2a69f9e598 in ?? () from /usr/bin/../lib/rr/librrpreload.so
#2  0x00007f2a69f9b0f5 in ?? () from /usr/bin/../lib/rr/librrpreload.so
#3  0x00007f2a69f9c108 in ?? () from /usr/bin/../lib/rr/librrpreload.so
#4  0x00007f2a69f9e5ca in ?? () from /usr/bin/../lib/rr/librrpreload.so
#5  0x00007f2a69f9e5f3 in ?? () from /usr/bin/../lib/rr/librrpreload.so
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

все это выполняю под rr: http://rr-project.org/

вопроса у меня два:

1. что я делаю не так?

2. как понять на что указывает `func_`?

★★★

Может awatch конфликтует с rr, может этот адрес пишется/читается много раз. Кажется, что проще определить this и сделать

b task_io_service_operation.hpp:55 if this == <something>

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

получил адрес this, установил ватчпоинт - и опять:

#0  0x0000000070000002 in ?? ()
#1  0x00007f2a69f9e598 in ?? () from /usr/bin/../lib/rr/librrpreload.so
#2  0x00007f2a69f9b0f5 in ?? () from /usr/bin/../lib/rr/librrpreload.so
#3  0x00007f2a69f9c108 in ?? () from /usr/bin/../lib/rr/librrpreload.so
#4  0x00007f2a69f9e5ca in ?? () from /usr/bin/../lib/rr/librrpreload.so
#5  0x00007f2a69f9e5f3 in ?? () from /usr/bin/../lib/rr/librrpreload.so
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

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

Именно ватчпоинт? rr просто заменяет память процесса, как бы это не конфликтовало с gdb. И если только одно срабатывание, может другие покажут то, что нужно.

xaizek ★★★★★
()

когда уже наконец то увидим как вы начнете использовать valgrind, сантинизеры и прочие плюшки, раз уж используете код в котором не разбираетесь

anonymous
()
Ответ на: комментарий от xaizek

Именно ватчпоинт?

да: awatch *(int*)0x3c395df

И если только одно срабатывание, может другие покажут то, что нужно.

возможно, но я устал продолжать. по этому адресу много чего срабатывает %)

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

Так зачем ватчпоинт (тем более на чтение и запись)? Условный брейкпоинт покажет создание объекта и параменты конструктора, а уже потом можно ставить на память.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)

все это выполняю под rr: http://rr-project.org/

И как оно? Последний раз, когда я это пробовал, оно загибалось на пногопоточке.

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