开发者社区> 问答> 正文

linux c调试的问题

目前在开发linux下面的一个c项目,debug目前主要靠日志来定位问题。
想问问linux下有什么好的方法debug吗?定位问题。
比如突然process crash了,怎么知道是哪一句代码出问题的?

展开
收起
a123456678 2016-06-07 19:36:18 2161 0
1 条回答
写回答
取消 提交回答
  • gdb的三种用法;
    1.调试自运行的可只执行程序;
    比如自己写的myProgrammer. 编译的过程加上-g标识符,调试通过以下方式启动:

    gdb myProgrammer
    2.调试coredump文件;
    某个进程有bug,突然crash了,如果系统打开了core dump标志,则会留下coredump文件(eg:core.71818):
    调试core dump文件启动方式:

    gdb myProgrammer core.71818
    3.调试服务程序;
    某个进程myService正在运行中,将gdb挂上去调试方法:
    1)找到这个进程的进程号pid:

    ps-fe| grep myService
    2) gdb挂上去后调试:

    gdb attach pid
    关于gdb中通用调试命令的总结,请见《linux工具快速教程》gdb节:
    http://linuxtools-rst.readthedocs.org/zh_CN/latest/tool/gdb.html

    关于linux程序调试还有很多工具,比如pstack等等,详见程序调试:
    http://linuxtools-rst.readthedocs.org/zh_CN/latest/advance/02_program_debug.html

    附:需要进程crash后产生core dump文件,需要设置下系统:

    1.core文件的生成开关和大小限制
    1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。
    ulimit -a :查看全部
    ulimit -n:查看可以打开的文件句柄数目;

    2)打开core开关
    使用ulimit -c filesize命令,可以限制core文件的大小(filesize的单位为blocks)。
    若ulimit -c unlimited,则表示core文件的大小不受限制。如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件。在调试此core文件的时候,gdb会提示错误。

    2019-07-17 19:30:51
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载