gdb调试正在运行的进程:linux
GDB能够对正在执行的程序进行调度,它容许开发人员中断程序 并查看其状态,以后还能让这个程序正常地继续执行windows
(gdb) attach xxxxx --- xxxxx为利用ps命令得到的子进程process id
(gdb) stop --- 这点很重要,你须要先暂停那个子进程,而后设置一些断点和一些Watch
(gdb) break 37 -- 在result = wib(value, div);这行设置一个断点,能够使用list命令察看源代码
Breakpoint 1 at 0x10808: file eg1.c, line 37.
(gdb) continue
Continuing.
Breakpoint 1, main () at eg1.c:37
37 result = wib(value, div);
(gdb) step多线程
在完成调试以后,不要忘记用detach命令断开链接,让被调试的进程能够继续正常运行。ide
咱们能够经过 1) gdb prog_name -> r 用在逐步调试本身的程序时函数
2) gdb -> attach process_id 正在运行中的后台程序忽然卡在了某个地方,先ps再gdb/attach工具
3) gdb prog_name core 程序core掉了ui
三种方式对一个程序进行调试;spa
1. thread——gdb 多线程调试命令:线程
info threads: 显示当前进程中的线程;调试
thread thread_no: 进入线程xx,一般紧接而来的是 bt/f 命令;
2. strace/ltrace:
前者关注系统调用和程序所接收的信号;后者关注库函数调用;
strace的应用在 咱们没有程序的源码,或者不方便从头开始运行程序时;能够方便查看一个应用程序进行了哪些系统调用。
而在但愿知道程序都调用了动态库中的哪些函数时,咱们使用 ltrace。ltrace有个-S选项,相似于strace功能。
3.检查内存泄漏的工具: valgrind (in linux, free) visual leak detector (windows , free) boundschecker(windows, free) profile工具: oprofile vtune