Linux下c++常用调试

进程调试

自己写的代码,直接gdb r/bt就可以了。

正在运行的进程,先ps ax找到进程id。然后gdb进入之后attach 进程id。stop/continue暂停和继续进程。

core了,有core文件,就直接gdb core文件。

线程调试

https://stackoverflow.com/questions/7698209/tracing-pthreads-in-linux

strace works for threads as well. Use strace -f to strace all threads.
To strace only a particular thread, you first have to find its tid (thread id). Threads have thread id's that's really a pid (process id)
Once you know the pid of the thread, use strace -p the_pid to strace that thread.

用strace也是可以跟踪线程的,先找到线程id。

1 ls proc/进程id/task/

然后就可以用

1 strace -p 线程id

 也可以用gdb。attch之后,info threads;thread thread_no: 进入线程xx,通常紧接而来的是 bt/f 命令;

http://blog.51cto.com/huangfu3342/1609574

内存泄漏

可以用valgrind

今天还学到一招,可以用pmap -p pid查看内存镜像。然后把内存dump出来。dump内存操作如下:

  1. gdb -p pid,先用gdb挂到运行的进程3。
  2. 再执行gdb的dump命令,dump binary memory 导出文件名 导出内存起始地址 导出内存结束地址。

再根据dump出的内存内容反推是哪里出了问题。

性能分析

用perf加火焰图。

https://www.cnblogs.com/linyx/p/10031195.html

posted @ 2018-11-01 19:20  linyx  阅读(1145)  评论(0编辑  收藏  举报