Почему GDB не может выполнить прерывание main()?Linux

Ответить
Anonymous
 Почему GDB не может выполнить прерывание main()?

Сообщение Anonymous »

Я запускаю приложение a.out вручную, передавая его в качестве аргумента динамическому загрузчику, как показано ниже. Мое приложение скомпилировано в режиме отладки.
*gdb --args /lib64/ld-linux-x86-64.so.2 ./a.out

Я ставлю точку останова, как показано ниже, программа не прерывается в main()
(gdb)set breakpoint pending on
(gdb)break main
(gdb)run

Вопрос: Как я могу остановить мой двоичный файл в основной системе?
обычная команда GDB работает
gdb ./a.out --> works.

Почему я запускаю приложение в качестве аргумента загрузчика? -
У меня есть специально скомпилированная библиотека glibc, которую я тестирую, запуская загрузчик вручную.
Пробный эксперимент
readelf -WS a.out | grep -i text
[14] .text PROGBITS 0000000000001050 001050 0001a2 00 AX 0 0 16

gdb -q --args /lib64/ld-linux-x86-64.so.2 ./a.out
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.27.so...done.
done.
(gdb) set stop-on-solib-events 1
(gdb) r
Starting program: /lib64/ld-linux-x86-64.so.2 ./a.out
Stopped due to shared library event (no libraries added or removed)
(gdb) c
Continuing.
Stopped due to shared library event:
Inferior loaded /lib64/ld-linux-x86-64.so.2
(gdb) c
Continuing.
Stopped due to shared library event:
Inferior loaded /lib/x86_64-linux-gnu/libc.so.6
(gdb) add-symbol-file a.out 0x1050
add symbol table from file "a.out" at
.text_addr = 0x1050
(y or n) y
Reading symbols from a.out...done.
(gdb) break main
Breakpoint 1 at 0x115a: file main.c, line 3.
(gdb) c
Continuing.
Hello World
[Inferior 1 (process 11451) exited normally]
(gdb)


Подробнее здесь: https://stackoverflow.com/questions/797 ... ak-on-main
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»