2014-12-18 2 views
0

Я отлаживаю программу C, которая использует unixODBC. Программа вызывает функцию SQLPrepare. Во время работы программа будет использовать dl_open, чтобы открыть базу данных библиотеки ODBC, которая также имеет функцию под названием SQLPrepare. Как я их дискриминирую?Как я могу различать функции, имеющие одно и то же имя при использовании gdb?

Например, если я хочу разобрать SQLPrepare, он на самом деле разбирает функцию, программа использует непосредственно:

(gdb) disassemble SQLPrepare 
Dump of assembler code for function SQLPrepare: 
    0x00007ffff7d7dbab <+0>:  push %rbp 
    0x00007ffff7d7dbac <+1>:  mov %rsp,%rbp 
    0x00007ffff7d7dbaf <+4>:  push %rbx 

Я пытаюсь использовать «disassemble libverticaodbc.so:SQLPrepare» команду, чтобы разобрать эту функцию в базе данных ODBC библиотеки драйверов, но он не может работать:

(gdb) disassemble libverticaodbc.so:SQLPrepare 
No symbol "libverticaodbc" in current context. 

Как я могу их различить? Заранее спасибо!

ответ

1

Как я могу различить их?

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

(gdb) info function SQLPrepare 
... two separate addresses should be listed 
(gdb) disas <addr1> 
(gdb) disas <addr2> 

Если одна или обе функции имеют отладочную информацию, вы можете столкнуться с this GDB ошибка.

Смежные вопросы