Linux下调试总结
段错误调试
感觉Linux环境下段错误的产生原因及调试方法小结写的不错,列举了几个主要的调试方式。有几点补充:
1. 在使用core dump的时候,关于打开/关闭生成core文件的命令:
+ `ulimit -c unlimited`使core文件大小没有限制。
+ `ulimit -c 0` 限制core文件大小为0,即不产生core文件。
2. 有时候core 提示的行并不是正在的问题所在,可以进一步使用`dmesg`来查看发生错误的地址。
多线程调试
- 有时候会有线程进不去的情况,在使用
info threads
时候后面的详细信息是 xxxx(线程id) in ??的情况,使用thread threadno
可以切换线程但是下一步执行就不行了。虽然没搞清楚为啥,但是 可以试试在线程函数设置一个断点,或者set scheduler-locking off
关闭系统调度锁定。
多进程调试
GDB 调试多进程或者多线程应用只适合多进程调试。
查看进程或线程(LWP,轻量级进程)
ps -fe | grep a.out
查看a.out的进程号。ps -Lf pid
查看进程pid的所有线程。- 进程状态表示:
D 不可中断 Uninterruptible sleep (usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
加号 位于后台的进程组
l 多线程,克隆线程