[Ltrace-devel] Why insert_breakpoint() is only done on a limited number of APIs?

Peter Teoh htmldeveloper at gmail.com
Tue May 20 06:50:51 UTC 2008


I have an Oracle process, which after I attached using ltrace:

ltrace -d -f -o myoutput -l
/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1 -p xxxx

the ouput file (myoutput) are as follows:

DEBUG: read_config_file.c:182: read_config_file(): Reading config file
`/etc/ltrace.conf'...
DEBUG: read_config_file.c:182: read_config_file(): Reading config file
`/root/.ltrace.conf'...
DEBUG: elf.c:38: do_init_elf(): Reading ELF from /proc/14482/exe...
DEBUG: elf.c:291: do_init_elf(): /proc/14482/exe 536 PLT relocations
DEBUG: elf.c:38: do_init_elf(): Reading ELF from
/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1...
DEBUG: elf.c:291: do_init_elf():
/u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1 9570 PLT
relocations
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=lwemgep, addr=0x82c4060)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=_VEC_memzero, addr=0x82c4020)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=lfiskb, addr=0x82c3f50)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=LhtStrYield, addr=0x82c3d70)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=_VEC_memcpy, addr=0x82c3c70)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=lfipthad, addr=0x82c3950)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=lfitrim, addr=0x82c3860)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=slzprintf, addr=0x82c31e0)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=lmmcalloc, addr=0x82c30f0)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=LhtStrEndIter, addr=0x82c2f80)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=lmmhpsz, addr=0x82c2ad0)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=ldxini, addr=0x82c2820)
DEBUG: breakpoints.c:35: insert_breakpoint():
insert_breakpoint(symbol=LhtStrBeginIter, addr=0x82c2810)
DEBUG: breakpoints.c:106: enable_all_breakpoints(): Enabling
breakpoints for pid 14482...
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c2f80)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c3f50)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c2810)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c2820)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c4020)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c3860)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c3c70)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c4060)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c30f0)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c3950)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c3d70)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c31e0)
DEBUG: breakpoint.c:25: enable_breakpoint(): enable_breakpoint(14482,0x82c2ad0)
DEBUG: process_event.c:88: process_event(): event: none
DEBUG: process_event.c:109: process_event(): event: syscall (SYS_read [3])
DEBUG: process_event.c:115: process_event(): event: sysret (SYS_read [3])
DEBUG: process_event.c:109: process_event(): event: syscall
(SYS_gettimeofday [78])
DEBUG: process_event.c:115: process_event(): event: sysret
(SYS_gettimeofday [78])
DEBUG: process_event.c:109: process_event(): event: syscall
(SYS_gettimeofday [78])

As can be seen, the problem is that the library file libclntsh.so.10.1
has at least a few thousand APIs:

objdump -t /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
|grep F..text  |wc
  19632  117797 1153899

But the breakpoints chosen  to be set is such a limited small number
(13) - why the disparities?

I tried to enumerate all the functions in the "-e" option  of ltrace,
but breakpoints is not inserted anyway.

Thank you for the help.


-- 
Regards,
Peter Teoh



More information about the Ltrace-devel mailing list