CentOS: gdb зависает при вызове __read_nocancel - PullRequest
1 голос
/ 07 августа 2020

Я прикрепляю gdb к исполняемому файлу, который был скомпилирован с флагами отладки. gdb зависает при __read_nocancel звонке. Если я запустил исполняемый файл без подключения gdb, тогда все в порядке, и приложение завершится нормально с ожидаемым результатом.

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

Изменить:

Оказывается, та библиотека, которую я использую, использует вилки и Python в фоновом режиме. После того, как я переключаюсь на inferior 1 и продолжаю, программа зависает.

Reading symbols from /usr/bin/python2.7...
[Attaching after process 13040 fork to child process 13041]
[New inferior 3 (process 13041)]
process 13041 is executing new program: /usr/bin/uname
[Inferior 3 (process 13041) exited normally]
(gdb) inferior 1
[Switching to inferior 1 [process 12455] (/usr/bin/python2.7)]
[Switching to thread 1.1 (Thread 0x7fec1cee5740 (LWP 12455))]
#0  0x00007fec1bc8cf42 in fork () from /lib64/libc.so.6
(gdb) c
Continuing.
^C
Thread 1.1 "python" received signal SIGINT, Interrupt.
0x00007fec1bcb6f70 in __read_nocancel () from /lib64/libc.so.6
(gdb) where
#0  0x00007ffff6db2f70 in __read_nocancel () from /lib64/libc.so.6
#1  0x00007ffff6d3fb14 in __GI__IO_file_underflow () from /lib64/libc.so.6
#2  0x00007ffff6d41063 in _IO_default_xsgetn () from /lib64/libc.so.6
#3  0x00007ffff6d32fdf in fread () from /lib64/libc.so.6
#4  0x00007ffff7a364ca in file_read (f=0x7fffeac4f8a0, args=<optimized out>) at Objects/fileobject.c:1084
#5  0x00007ffff7ac6345 in call_function (oparg=<optimized out>, pp_stack=0x7ffffffef5e0) at Python/ceval.c:4352
[Attaching after process 18291 fork to child process 18293]
[New inferior 3 (process 18293)]
process 18293 is executing new program: /usr/bin/uname
[Inferior 3 (process 18293) exited normally]
(gdb) info inferiors 
  Num  Description       Executable        
  1    process 18271     /opt/cpp_stuff/tests/test
  2    process 18291     /usr/bin/bash     
* 3    <null>            /usr/bin/uname    
(gdb) 

1 Ответ

0 голосов
/ 10 августа 2020

gdb зависает при вызове __read_nocancel. Если я запустил исполняемый файл без подключения gdb, тогда все в порядке, и приложение завершится нормально с ожидаемым результатом.

Нет: GDB не зависает.

Ваше приложение ( python) заблокирован при попытке прочитать с какого-то FILE. Ожидаемый ввод python никогда не приходит, поэтому он ждет вечно.

Вы не предоставили достаточно информации, чтобы мы знали, что первый подчиненный пытается прочитать и почему этот ввод никогда не приходит.

Предположение Марка Плотника о том, что у вас есть еще один подчиненный (2?), Который остановлен и должен производить результат, которого ожидает подчиненный 1, вероятно, будет правильным. Если да, то вам нужно возобновить работу другого подчиненного.

...