[20250901]使用gdb的rbreak命令了解oracle内部调用的函数.txt --//可以利用gdb的rbreak命令特性找需要的函数。不过在学习过程还是遇到一些问题,做一个记录: 1.使用nm命令: --//以前喜欢通过nm命令了解oracle内部调用的函数或者过程。 $ nm $(which oracle) | grep kgl.*Mutex 0000000015370830 T kglGetBucketMutex 0000000015371280 T kglGetHandleMutex 00000000153712c0 T kglGetMutex 00000000137b43b0 T kglIsAnyMutexHeld 0000000015370800 T kglIsHandleMutexHeld 0000000015370c30 T kglIsMutexHeld 00000000058f8690 T kglMutexCleanup 00000000058f8780 t kglMutexCleanupAll 0000000015371790 T kglMutexHeld 000000001a327760 d kglMutexLocations 0000000015370c80 T kglMutexNotHeld 00000000137a9930 t kglMutexRecovery 00000000058f8600 t kglMutexWait 00000000058f8700 T kglOnErrorMutexCleanup 00000000059289f0 T kglReleaseAllMutex 0000000015370890 T kglReleaseBucketMutex 00000000153708e0 T kglReleaseMutex 00000000137a9e00 T kglSessionMutexHeld --//缺点不知道是否遗漏,可能还存在许多库文件。 $ ldd $(which oracle) linux-vdso.so.1 => (0x00007ffe39159000) libofs.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libofs.so (0x00007fb9ea72d000) libskgxp.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libskgxp.so (0x00007fb9ea408000) libskjcx.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libskjcx.so (0x00007fb9ea1ba000) librt.so.1 => /lib64/librt.so.1 (0x00007fb9e9f8a000) liboevm.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/liboevm.so (0x00007fb9e9d67000) libclsra.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libclsra.so (0x00007fb9e9b22000) libdbcfg.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libdbcfg.so (0x00007fb9e98f5000) libhasgen.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libhasgen.so (0x00007fb9e8b00000) libocr.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libocr.so (0x00007fb9e87d5000) libocrb.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libocrb.so (0x00007fb9e84ba000) libocrutl.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libocrutl.so (0x00007fb9e8297000) libaio.so.1 => /lib64/libaio.so.1 (0x00007fb9e8095000) libons.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libons.so (0x00007fb9e7e31000) libmql1.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libmql1.so (0x00007fb9e7bca000) libipc1.so => /u01/app/oracle/product/21.0.0/dbhome_1/lib/libipc1.so (0x00007fb9e7719000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fb9e7515000) libm.so.6 => /lib64/libm.so.6 (0x00007fb9e7212000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb9e6ff6000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fb9e6ddc000) libc.so.6 => /lib64/libc.so.6 (0x00007fb9e6a1a000) /lib64/ld-linux-x86-64.so.2 (0x00007fb9ea930000) 2.下载ora_functions: --//网站orafun.info可以查询oracle c functions.Created by Frits Hoogland with a little help from Kamil Stawiarski. --//可以通过它了解oracle 内部C 函数.实际上可以直接下载相关文件,在本地使用. https://gitlab.com/FritsHoogland/ora_functions/archive/master/ora_functions-master.tar.gz https://gitlab.com/FritsHoogland/ora_functions --//直接使用grep命令过滤查询相关信息。 $ grep ^kgl.*Mutex functions.csv kglGetBucketMutex|get mutex for KGL hash table bucket, calls kglGetMutex kglGetMutex|get mutex kglIsMutexHeld|validate mutex, returns pointer to AOL kglMutexHeld|validate mutex state with AOL kglOnErrorMutexCleanup|on error mutexes cleanup. called to cleanup mutexes when an error has occured. kglReleaseBucketMutex|release mutex for KGL hash table bucket, calls kglReleaseMutex kglReleaseMutex|release mutex $ ./lookup.awk kglGetMutex kglGetMutex : kernel generic library cache management get mutex 3.昨天学习gdb rbreak命令: (gdb) help rbreak Set a breakpoint for all functions matching REGEXP. --//可以利用这个特性找需要的函数。不过在学习过程还是遇到一些问题,做一个记录: (gdb) rbreak *Mutex* --//没有输出。 --//尝试如下: $ grep *Mutex* functions.csv $ grep "*Mutex*" functions.csv --//难道这样写正则表达式存在问题? 星号表示字符出现0次或者多次。我的例子前面*前面没有字符,我估计当作真实的*。 $ echo "*MutexAAA" | grep *Mutex *MutexAAA ~~~~~~ --//grep有彩色设置,这里通过下划线表示。这里还是注意一些细节问题,bash shell上的正则表达式不同,bash shell不使用双引号会 --//展开,不小心很容易犯错。 $ touch AMutex $ echo "*MutexAAA" | grep *Mutex --//没有输出,实际上相当于grep AMutex。 $ echo "*MutexAAA" | grep "*Mutex" *MutexAAA $ ls -l *g1* -rw-r--r--. 1 oracle oinstall 621 2025-07-14 15:55:08 g1.txt --//bash shell上的正则表达式与其他地方的正则表达式有一点点不同,不小心很容易犯错!! (gdb) rbreak Mutex (gdb) rbreak .*Mutex --//两者都有输出,输出太多省略。 (gdb) rbreak kgl*Mutex* Note: breakpoints 1, 22, 123 and 220 also set at pc 0x58f8600. Breakpoint 302 at 0x58f8600 <function, no debug info> kglMutexWait; Note: breakpoints 2, 23, 124 and 221 also set at pc 0x58f8690. Breakpoint 303 at 0x58f8690 <function, no debug info> kglMutexCleanup; Note: breakpoints 3, 25, 126 and 223 also set at pc 0x58f8780. Breakpoint 304 at 0x58f8780 <function, no debug info> kglMutexCleanupAll; Note: breakpoints 4, 65, 166 and 263 also set at pc 0x137a9930. Breakpoint 305 at 0x137a9930 <function, no debug info> kglMutexRecovery; Note: breakpoints 5, 90, 191 and 288 also set at pc 0x15370c80. Breakpoint 306 at 0x15370c80 <function, no debug info> kglMutexNotHeld; Note: breakpoints 6, 93, 194 and 291 also set at pc 0x15371790. Breakpoint 307 at 0x15371790 <function, no debug info> kglMutexHeld; --//正则表达式有时候真的很复杂,没有kglGetMutex的输出。这里可以理解理解为 --//kgl*Mutex* 包含l出现0次或者多次。 (gdb) rbreak kgl.*Mutex Breakpoint 1 at 0x58f8600 <function, no debug info> kglMutexWait; Breakpoint 2 at 0x58f8690 <function, no debug info> kglMutexCleanup; Breakpoint 3 at 0x58f8700 <function, no debug info> kglOnErrorMutexCleanup; Breakpoint 4 at 0x58f8780 <function, no debug info> kglMutexCleanupAll; Breakpoint 5 at 0x59289f0 <function, no debug info> kglReleaseAllMutex; Breakpoint 6 at 0x137a9930 <function, no debug info> kglMutexRecovery; Breakpoint 7 at 0x137a9e00 <function, no debug info> kglSessionMutexHeld; Breakpoint 8 at 0x137b43b0 <function, no debug info> kglIsAnyMutexHeld; Breakpoint 9 at 0x15370800 <function, no debug info> kglIsHandleMutexHeld; Breakpoint 10 at 0x15370830 <function, no debug info> kglGetBucketMutex; Breakpoint 11 at 0x15370890 <function, no debug info> kglReleaseBucketMutex; Breakpoint 12 at 0x153708e0 <function, no debug info> kglReleaseMutex; Breakpoint 13 at 0x15370c30 <function, no debug info> kglIsMutexHeld; Breakpoint 14 at 0x15370c80 <function, no debug info> kglMutexNotHeld; Breakpoint 15 at 0x15371280 <function, no debug info> kglGetHandleMutex; Breakpoint 16 at 0x153712c0 <function, no debug info> kglGetMutex; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Breakpoint 17 at 0x15371790 <function, no debug info> kglMutexHeld; --//rbreak有一个缺点没有参数支持忽略大小写的查询: (gdb) rbreak kglgetmutex --//没有结果。 (gdb) rbreak kgl[gG]et[mM]utex Note: breakpoints 1, 2 and 3 also set at pc 0x153712c0. Breakpoint 4 at 0x153712c0 <function, no debug info> kglGetMutex; 4.小结: --//利用gdb的rbreak命令特性找需要的函数. --//注意正则表达式使用的细节问题。
[20250901]使用gdb的rbreak命令了解oracle内部调用的函数.txt
来源:这里教程网
时间:2026-03-03 22:43:24
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- AI时代如何用影像讲故事?“鲍德熹·爱奇艺AI剧场”创作营向全球征集创意
AI时代如何用影像讲故事?“鲍德熹·爱奇艺AI剧场”创作营向全球征集创意
26-03-03 - 数据库管理-第358期 23ai:DG PDB(20250818)
数据库管理-第358期 23ai:DG PDB(20250818)
26-03-03 - Sql monitor介绍使用
Sql monitor介绍使用
26-03-03 - “激光雷达双冠王”禾赛回港上市,稀缺资产引爆中国科技叙事
“激光雷达双冠王”禾赛回港上市,稀缺资产引爆中国科技叙事
26-03-03 - 涨了一倍多的顺丰同城,还能继续做大即时零售基建的蛋糕吗?
涨了一倍多的顺丰同城,还能继续做大即时零售基建的蛋糕吗?
26-03-03 - Oracle-生成慢SQL的SQL-MONITOR报告
Oracle-生成慢SQL的SQL-MONITOR报告
26-03-03 - Oracle ADG环境下备库temp表空间扩容
Oracle ADG环境下备库temp表空间扩容
26-03-03 - 数据库圈值得关注的事
数据库圈值得关注的事
26-03-03 - oratop秘籍曝光,故障定位快人一步!
oratop秘籍曝光,故障定位快人一步!
26-03-03 - Oracle数据库体系结构图
Oracle数据库体系结构图
26-03-03
