请教,gdb
时间:2010-07-09
来源:互联网
程序死亡点的。
作者: yulihua49 发布时间: 2010-07-09
dbx 是这样的 :试下gdb 看看?(猜测大同小异,错了别怪我 呵呵)
dbx program_name core
where (就可以看到程序在哪个函数崩溃的,栈的状态都有显示)
作者: llslls_007 发布时间: 2010-07-09
作者: prolj 发布时间: 2010-07-09
dbx 是这样的 :试下gdb 看看?(猜测大同小异,错了别怪我 呵呵)
dbx pr ...
llslls_007 发表于 2010-07-09 10:06
#0 0x0000000000412568 in n_zero ()
(gdb) where
#0 0x0000000000412568 in n_zero ()
#1 0x000000000041317c in str_a64n ()
#2 0x000000000040ac5f in RecvPack ()
#3 0x000000000040dd2b in thread_work ()
#4 0x00002b4739441143 in start_thread () from /lib64/libpthread.so.0
#5 0x00002b473961174d in clone () from /lib64/libc.so.6
#6 0x0000000000000000 in ?? ()
我想看指令和寄存器,好像应该是print,不知print什么。
作者: yulihua49 发布时间: 2010-07-09
看指令 和 寄存器 看下汇编代码 满足你的需求吗
作者: llslls_007 发布时间: 2010-07-09
看指令 和 寄存器 看下汇编代码 满足你的需求吗
llslls_007 发表于 2010-07-09 10:56
就是看反汇编。
作者: yulihua49 发布时间: 2010-07-09
gdb
看反汇编
disas [函数名或地址]
单步不进入
ni
单步进入
si
断点
b [函数名或地址]
运行
r
断点后继续运行
c
帮助
help
详细帮助
help [上一个help列出的分类]
作者: 没本 发布时间: 2010-07-09
gdb
看反汇编
disas [函数名或地址]
单步不进入
ni
单步进入
si
...
没本 发表于 2010-07-09 14:15
谢谢。
看看edi的值?
作者: yulihua49 发布时间: 2010-07-09
此时reg的值是,堆栈顶层时的寄存器值。一般而言,堆栈最顶层寄存器的值是无效的,需要看堆栈顶层的下一层,此时用up down命令,在堆栈中移动
作者: tblue7 发布时间: 2010-07-09
此时reg的值是,堆栈顶层时的寄存器值。一般而言,堆栈最顶层寄存器的值是无效的,需要看堆栈顶层 ...
tblue7 发表于 2010-07-09 17:42
reg不是死亡时的快照?
(gdb) where
#0 0x0000000000412568 in n_zero ()
#1 0x000000000041317c in str_a64n ()
#2 0x000000000040ac5f in RecvPack ()
#3 0x000000000040dd2b in thread_work ()
#4 0x00002b4739441143 in start_thread () from /lib64/libpthread.so.0
#5 0x00002b473961174d in clone () from /lib64/libc.so.6
#6 0x0000000000000000 in ?? ()
(gdb) disas 0x0000000000412568
Dump of assembler code for function n_zero:
0x0000000000412561 <n_zero+0>: test %edi,%edi
0x0000000000412563 <n_zero+2>: je 0x412577 <n_zero+22>
0x0000000000412565 <n_zero+4>: mov %rsi,%rax
0x0000000000412568 <n_zero+7>: movl $0x0,(%rax)
0x000000000041256e <n_zero+13>: add $0x4,%rax
0x0000000000412572 <n_zero+17>: sub $0x1,%edi
0x0000000000412575 <n_zero+20>: jne 0x412568 <n_zero+7>
0x0000000000412577 <n_zero+22>: mov %rsi,%rax
0x000000000041257a <n_zero+25>: retq
End of assembler dump.
(gdb) info reg
rax 0x4 4
rbx 0x2aacbc91d820 46921386416160
rcx 0x2aacbc91f908 46921386424584
rdx 0x4 4
rsi 0x4 4
rdi 0x9 9
rbp 0x4 0x4
rsp 0x2aacbc91d600 0x2aacbc91d600
r8 0x2aacbc91d5c0 46921386415552
r9 0x2aacbc91d4c0 46921386415296
r10 0x2aacbc91d4c0 46921386415296
r11 0x206 518
r12 0x2aacbc91ea90 46921386420880
r13 0xc 12
r14 0x2aacbc91f160 46921386422624
r15 0xaf2a644c 2938790988
rip 0x40ac5f 0x40ac5f <RecvPack+243>
eflags 0x10206 [ PF IF RF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
fctrl 0x37f 895
fstat 0x0 0
ftag 0xffff 65535
fiseg 0x0 0
fioff 0x0 0
foseg 0x0 0
fooff 0x0 0
fop 0x0 0
mxcsr 0x1f80 [ IM DM ZM OM UM PM ]
edi是rdi的一部分?最后的指令是哪条?
看起来指令优化很好,不过还没有用到串指令。
如果用 movsd和jcxz指令就更好。还有;
rep movsd,一条指令顶这一大堆。
作者: yulihua49 发布时间: 2010-07-09
作者: 没本 发布时间: 2010-07-09
作者: 没本 发布时间: 2010-07-09
没本 发表于 2010-07-09 17:57
不行的,我还不至于犯这种低级错误。这是成熟的程序,单个连接运行绝无问题,所以跟踪不到的。
这是我把文件数扩到2048,开1500个连接,在大约1200多个线程开始工作时疯了,可能是其他资源问题。
每次错的都不一样,不可再现错误。找不到的话就不找了,反正以后改线程池。
不管怎么up,reg是不变的。
作者: yulihua49 发布时间: 2010-07-09
2,编译程序的时候加上-g3选项。
3,gdb -g3编译生成的文件名 core文件。
进去以后想做什么做什么就可以啦,这时候就是挂掉时候的状态了。
作者: 聪聪知不道 发布时间: 2010-07-09
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28