отладка postgres (и внешних библиотек .so) с помощью kdbg (KDE Debugger в Lilnux)

Я хотел бы отлаживать определяемую пользователем функцию (называемую prepareTheOutputRecord, реализованную на C/C++, которая является частью определяемой пользователем функции в postgres. Вот как я достигаю этого с помощью gdb:

  1. Функция prepareTheOutputRecord находится в файле libMyExtenstion.so в каталоге lib сервера postgresql.
  2. Я запускаю оболочку psql, получаю pid процесса

    postgres=# SELECT pg_backend_pid();
    pg_backend_pid
    - - - - - - - - - - - - - - 
        4120
    (1 row)
    
  3. Запустите gdb с прикрепленным pid:

    gdb -p 4120
    
  4. Найдите теперь файл .so, как именно называется функция:

    nm -as libMyExtenstion.so | grep prepareTheOputRecord 
    00000000002633fe t _ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData
    
  5. Установите точку останова в gdb и запустите программу:

    (gdb) b _ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData
    Function "_ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData" not defined.
    Make breakpoint pending on future shared library load? (y or [n]) y
    Breakpoint 1 (_ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData) pending.
    (gdb) c
    
  6. Выполните SQL в psql. В какой-то момент в gdb срабатывает точка останова:

    Breakpoint 1, prepareTheOutputRecord (this=0x1116410, fcinfo=0x7fff3a41e150)
    at ../Dir/file.cpp:1736
    1736        funcctx = SRF_PERCALL_SETUP();
    (gdb) 
    
  7. Продолжайте отлаживать код.

Я хочу сделать то же самое в kdbg. Для этого я загрузил исполняемый файл postgres, присоединил его к процессу, загрузил файл cpp, установил точку останова с помощью мыши на функции, продолжил выполнение процесса postgres, но точка останова так и не сработала :( Я повторил то же самое с файлом . so (вместо исполняемого файла postgres) без каких-либо успехов.Я даже пытался установить точку останова на _ZN6libafd6LIBAFD22prepareTheOutputRecordEP20FunctionCallInfoData (без щелчков мыши), но программа не останавливается в kdbg :(


person arthur    schedule 24.07.2013    source источник


Ответы (1)


Я считаю, что проблема заключалась в том, что kdb не запускался как корень (или postgres). Из-за неправильных разрешений символы не были загружены, и поэтому точка останова не отображалась (и не разрешалось размещать в функции)

person arthur    schedule 03.12.2013