gdb调试中两种令人费解的情况解释

gdb这个调试工具怎么使用,在于相关的命令的使用(break、watch、print、continue、next、step等),

gdb如何调试,需要结合程序的设计,代码的逻辑,多实践总结。

这里解释两个在实践中遇到的令初学者费解的问题:

 

1)为啥设置了断点 b write_pipe,gdb调试中,在断点处没有停下?

      设想下面的情况,一个进程在后台运行过程中CPU占有率140%,gdb挂上去查看是什么情况。

            gdb program pid(进程的ID)

            通过bt查看忙碌的线程的调用栈,发现其一直在忙write_pipe,通过b write_pipe设置断点,再continue跑起来,

            发现程序没有在write_pipe处停下。

       这种情况,一般是程序员在程序运行后,有修改了代码重新进行了编译,符号的地址与原来发生了错位,就是说

        断点设置到另外的代码上了。

2)gdb用bt显示调用栈的信息,显示??,可能是什么原因?

      

                       Figure -- 1

    这个现象,在上面调试coredump文件时经常会发生,调用栈#3 #2 #1对应的地址无法对应具体的函数。
    原因是,1)产生coredump的程序,与当前调试时的程序,是不同的版本,调试信息&符号表都错位了。
    2)调用栈溢出(这个没有确认过)。3)gdb corefile使用不当,调试corefile需要程序,gdb program corefile。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值