gdb调试之---当commit时碰到的第一个等待事件是什么?

转载请注明出处:http://blog.youkuaiyun.com/guoyjoe/article/details/18458231

还是接着上一篇文章的实验:gdb调试之---当update时第一个持有的Latch是什么Latch锁?
 http://blog.youkuaiyun.com/guoyjoe/article/details/18456937


1、退出gdb

(gdb) q
The program is running.  Quit anyway (and detach it)? (y or n) y
Detaching from program: /u01/app/oracle/product/11.2.0/bin/oracle, process 7376



2、通过系统进程号7376打开gdb程序

[oracle@mydb ~]$ gdb $ORACLE_HOME/bin/oracle 7376
GNU gdb Fedora (6.8-27.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu"...
(no debugging symbols found)
Attaching to program: /u01/app/oracle/product/11.2.0/bin/oracle, process 7376
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libodm11.so...(no debugging symbols found)...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libodm11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libcell11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libcell11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libskgxp11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libskgxp11.so
Reading symbols from /lib64/librt.so.1...done.
Loaded symbols for /lib64/librt.so.1
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libnnz11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libnnz11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libclsra11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libclsra11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libdbcfg11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libdbcfg11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libhasgen11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libhasgen11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libskgxn2.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libskgxn2.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libocr11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libocr11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libocrb11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libocrb11.so
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libocrutl11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libocrutl11.so
Reading symbols from /usr/lib64/libaio.so.1...done.
Loaded symbols for /usr/lib64/libaio.so.1
Reading symbols from /lib64/libdl.so.2...done.
Loaded symbols for /lib64/libdl.so.2
Reading symbols from /lib64/libm.so.6...done.
Loaded symbols for /lib64/libm.so.6
Reading symbols from /lib64/libpthread.so.0...done.
[Thread debugging using libthread_db enabled]
[New Thread 0x2b0b8fef0910 (LWP 7376)]
Loaded symbols for /lib64/libpthread.so.0
Reading symbols from /lib64/libnsl.so.1...done.
Loaded symbols for /lib64/libnsl.so.1
Reading symbols from /lib64/libc.so.6...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /usr/lib64/libnuma.so.1...done.
Loaded symbols for /usr/lib64/libnuma.so.1
Reading symbols from /lib64/libnss_files.so.2...done.
Loaded symbols for /lib64/libnss_files.so.2
Reading symbols from /u01/app/oracle/product/11.2.0/lib/libnque11.so...done.
Loaded symbols for /u01/app/oracle/product/11.2.0/lib/libnque11.so
0x0000003f0d40d290 in __read_nocancel () from /lib64/libpthread.so.0
(gdb) 


3、执行commit,commit被阻塞了。

gyj@OCM> commit;


4、设断点(预先知道待等事件的函数kslwtbctx),并运行。

(gdb) b kslwtbctx
Breakpoint 1 at 0x8f9a5c2
(gdb) c
Continuing.

Breakpoint 1, 0x0000000008f9a5c2 in kslwtbctx ()
(gdb) 


5、查等待事件kslwtbctx函数的第一个参数,用命令info all-register显示寄存器

(gdb) info all-register
rax            0x8f     143
rbx            0x1      1
rcx            0x11263  70243
rdx            0x11974  72052
rsi            0x2acf2e 2805550
rdi            0x7fff1c577028   140733668880424
rbp            0x7fff1c576ed0   0x7fff1c576ed0
rsp            0x7fff1c576ed0   0x7fff1c576ed0
r8             0x0      0
r9             0x7a59   31321
r10            0x9b0abcb8       2601172152
r11            0x0      0
r12            0x1      1
r13            0x0      0
r14            0xbb132a4        196162212
r15            0x1      1
rip            0x8f9a5c2        0x8f9a5c2 <kslwtbctx+4>
eflags         0x246    [ PF ZF IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
st0            0        (raw 0x00000000000000000000)
---Type <return> to continue, or q <return> to quit---
st1            0        (raw 0x00000000000000000000)
st2            0        (raw 0x00000000000000000000)
st3            0        (raw 0x00000000000000000000)
st4            0        (raw 0x00000000000000000000)
st5            0        (raw 0x00000000000000000000)
st6            333296   (raw 0x4011a2be000000000000)
st7            300384   (raw 0x401192ac000000000000)
fctrl          0x27f    639
fstat          0x0      0
ftag           0xffff   65535
fiseg          0x0      0
fioff          0x9394e95        154750613
foseg          0x7fff   32767
fooff          0x1c573f50       475479888
fop            0x0      0
xmm0           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm1           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm2           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm3           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x8000000000000000, 0x8000000000000000}, v16_int8 = {0xfe, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, v8_int16 = {0xfffe, 0xffff, 0xffff, 0xffff, 0xfffe, 0xffff, 
    0xffff, 0xffff}, v4_int32 = {0xfffffffe, 0xffffffff, 0xfffffffe, 0xffffffff}, v2_int64 = {0xfffffffffffffffe, 0xfffffffffffffffe}, 
  uint128 = 0xfffffffffffffffefffffffffffffffe}
---Type <return> to continue, or q <return> to quit---
xmm4           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm5           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x32, 0xa3, 0xd7, 0x2, 0x0 <repeats 12 times>}, 
  v8_int16 = {0xa332, 0x2d7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x2d7a332, 0x0, 0x0, 0x0}, v2_int64 = {0x2d7a332, 0x0}, 
  uint128 = 0x00000000000000000000000002d7a332}
xmm6           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm7           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0xda, 0x87, 0xd7, 0x2, 0x0 <repeats 12 times>}, 
  v8_int16 = {0x87da, 0x2d7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x2d787da, 0x0, 0x0, 0x0}, v2_int64 = {0x2d787da, 0x0}, 
  uint128 = 0x00000000000000000000000002d787da}
xmm8           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm9           {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm10          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm11          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm12          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x18, 0xe, 0x73, 0x90, 0xb, 0x2b, 0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0xe18, 0x9073, 0x2b0b, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x90730e18, 0x2b0b, 0x0, 0x0}, 
  v2_int64 = {0x2b0b90730e18, 0x0}, uint128 = 0x000000000000000000002b0b90730e18}
xmm13          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
xmm14          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
---Type <return> to continue, or q <return> to quit---
xmm15          {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0}, v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 
    0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 = 0x00000000000000000000000000000000}
mxcsr          0x1fa1   [ IE PE IM DM ZM OM UM PM ]


6、rdi/edi是第一个参数, rsi/esi是第二个参数,贴出info all-register命令所显示函数kslwtbctx()的两个参数,如下

rsi            0x2acf2e 2805550                                    ----第二个参数
rdi            0x7fff1c577028   140733668880424    ----第一个参数


7、利用第一个参数rdi=0x7fff1c577028,显示内存中32个字节。

(gdb) x/32 0x7fff1c577028
0x7fff1c577028: 0x00007a59      0x00000000      0x1c577110      0x00007fff
0x7fff1c577038: 0x01b5e250      0x00000000      0x00000000      0x00000000
0x7fff1c577048: 0x00000000      0x00000000      0x00000000      0x00000001
0x7fff1c577058: 0x00000000      0x00000000      0x00000000      0x00000000
0x7fff1c577068: 0x00000000      0x00000000      0x00000000      0x00000000
0x7fff1c577078: 0x00000000      0x00000000      0x00000001      0x00000000
0x7fff1c577088: 0x0a12110c      0x00000000      0x0000008f      0x00011974
0x7fff1c577098: 0x7fffffff      0x00000000      0x00011263      0x00000000
(gdb) 


8、找到等待事件的编号是0x0000008f,转化为十进制为143,即0x0000008f  ===>143号


9、找出commit的等待事件

sys@OCM> select  name from v$event_name where event#=143;

NAME
----------------------------------------------------------------
log file sync


10、commit时的第一个等待事件就是log file sync。


QQ:252803295

技术交流QQ群:
DSI&Core Search  Ⅰ 群:127149411(2000人技术群:未满)
DSI&Core Search  Ⅱ 群:177089463(1000人技术群:未满)
DSI&Core Search  Ⅲ 群:284596437(500人技术群:未满)
DSI&Core Search  Ⅳ 群:192136702(500人技术群:未满)
DSI&Core Search  Ⅴ 群:285030382(500人闲聊群:未满)


MAIL:dbathink@hotmail.com

BLOG: http://blog.youkuaiyun.com/guoyjoe

WEIBO:http://weibo.com/guoyJoe0218

ITPUB: http://www.itpub.net/space-uid-28460966.html

OCM:   http://education.oracle.com/education/otn/YGuo.HTM 

ACONG:  http://www.acoug.org/category/membership


<think>我们正在讨论如何提交名为"user-debug"的软件包。从引用中可以看到,gitcommit的基本用法是:1.进入项目目录:cd[目录名]2.初始化git(如果尚未初始化):gitinit3.添加远程仓库(如果尚未添加):gitremoteaddorigin[远程仓库地址]4.将文件添加到暂存区:gitadd[文件或目录](如果要添加所有更改,可以使用gitadd.)5.提交更改:gitcommit-m"提交描述"6.推送到远程仓库:gitpush-uorigin[分支名]但是,用户特别提到要提交名为"user-debug"的软件包。这里我们假设"user-debug"是一个目录或者是一个文件集合(比如一个软件包项目)。步骤分解:1.**准备仓库**:确保项目已经是一个git仓库(如果已经初始化过,则跳过)。2.**添加文件**:需要将user-debug软件包相关的文件添加到暂存区。如果这个软件包在项目目录下,我们可以进入该目录或者从项目根目录添加。3.**提交**:使用gitcommit命令提交。具体操作如下:###步骤1.**进入项目目录(如果当前不在)**:```bashcd/path/to/your/project```2.**添加user-debug软件包文件到暂存区**:如果user-debug是一个目录,则添加整个目录:```bashgitadduser-debug/```或者,如果你想添加所有更改(包括user-debug和其他修改):```bashgitadd.```3.**提交更改**:提交,应使用有意义的提交信息,说明这次提交的内容。例如:```bashgitcommit-m"添加user-debug软件包"```4.**推送到远程仓库**(如果需要):如果是第一次推送到远程仓库,需要设置上游分支(假设当前分支为master):```bashgitpush-uoriginmaster```如果已经设置过上游分支,直接使用:```bashgitpush```注意:-在提交之前,确保已经配置了用户名和邮箱(全局或项目级配置):```bashgitconfig--globaluser.name"你的名字"gitconfig--globaluser.email"你的邮箱"```-如果user-debug软件包是新建的,那么使用`gitadd`将其加入版本控制。如果是修改已有的,同样使用`gitadd`来暂存修改。###引用说明-引用[1]中提到了提交到远程仓库的基本流程,包括`gitadd`,`gitcommit`,`gitpush`等步骤。-引用[2]介绍了`gitlog`用于查看提交历史,在提交后可以用这个命令查看提交记录。-引用[3]提到了如何删除已经提交的commit,如果在提交后需要撤销,可以参考该引用(不过当前问题用不到)。-引用[4]是关于Linux下安装git和gdb,与当前操作关系不大。###相关问题根据以上内容,可以生成如下相关问题:1.如何撤销一个`gitcommit`提交?2.如何添加特定目录到git暂存区?3.如何配置git的用户名和邮箱?</think> ### 如何提交名为 "user-debug" 的软件包到 Git #### 操作步骤: 1. **进入项目目录** ```bash cd /path/to/your/project ``` 2. **添加特定软件包文件** ```bash git add user-debug/ # 添加整个user-debug目录 # 或 git add user-debug/* # 添加目录下所有文件 ``` 3. **执行提交操作** ```bash git commit -m "提交user-debug软件包" ``` 📌 **关键说明**: - `-m` 参数后是提交描述(必须填写) - 如未配置默认编辑器,需通过`git config --global core.editor`设置[^1] 4. **推送到远程仓库** ```bash git push origin master # 推送到master分支 ``` #### 完整示例流程: ```bash # 1. 进入包含user-debug的项目目录 cd ~/projects/my-software # 2. 添加软件包文件 git add user-debug/ # 3. 提交变更 git commit -m "添加user-debug调试工具包" # 4. 推送到远程仓库 git push origin master ``` #### 注意事项: 1. 首次推送需用`-u`参数建立追踪: ```bash git push -u origin master ``` 2. 如果`user-debug`是新建目录: - 确保目录中有实际文件(空目录Git不会跟踪) - 可通过`touch user-debug/.gitkeep`创建占位文件 3. 提交后验证: ```bash git log -- user-debug # 查看该目录提交历史[^2] ``` 4. 误提交恢复: ```bash git reset HEAD^ # 撤销最近一次提交[^3] ``` ### 引用说明 - `git add`和`git commit`是核心提交命令[^1] - `git log`可查看提交记录[^2] - 误操作可使用重置命令[^3] - Git基础安装参考Linux环境指南[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值