Step1.内存泄露侦测
打开第一个终端:(显示异常信息)
valgrind --tool=memcheck --vgdb=yes --vgdb-error=0 ./app
界面示例:
==130227== Continuing ...
==130227== Use of uninitialised value of size 8
==130227== at 0x5971B47: PyObject_Free (in /usr/lib64/libpython3.6m.so.1.0)
==130227== by 0x59DFA99: ??? (in /usr/lib64/libpython3.6m.so.1.0)
==130227== by 0x5A5CDE3: PyAST_CompileObject (in /usr/lib64/libpython3.6m.so.1.0)
==130227== by 0x5A63D17: ??? (in /usr/lib64/libpython3.6m.so.1.0)
==130227== by 0x591080A: PyRun_FileExFlags (in /usr/lib64/libpython3.6m.so.1.0)
==130227== by 0x40A02E: gp_py_invoke_script_with_params (gppython.c:61)
==130227== by 0x40F900: calc_measure_of (gpcalc.c:20)
==130227== by 0x40C845: gen_MeasureOfDataArray (mqtt_payload.c:40)
==130227== by 0x40CDD5: gen_rawSample_payload (mqtt_payload.c:169)
==130227== by 0x40AE5D: timer_realdata (mqtt_cmd.c:211)
==130227== by 0x505CF5E: timer_sigev_thread (in /usr/lib64/librt-2.17.so)
==130227== by 0x4E43EA4: start_thread (in /usr/lib64/libpthread-2.17.so)
==130227==
==130227== (action on error) vgdb me ...
==130227== Continuing ...
time scale = 10000.0
./py/measure.py
Step2.gdb调试
打开第二个终端:(手工gdb调试控制)
加载程序 gdb ./app
此时记得把valgrind
运行 (gdb) run param1 param2....
加断点 (gdb) break function
显示堆栈 (gdb) backtrace 可以简写做bt
暂时停止某个异常信号的捕获: (gdb) handle SIGXCPU nostop
继续执行 (gdb) continue
单步进入 (gdb) step
单步略过 (gdb) next
退出当前函数 (gdb) finish
打印变量 (gdb) print a1
显示变量 (gdb) dispaly a1
退出(gdb) quit
示例:
(gdb) continue
Continuing.Breakpoint 2, calc_FFT_of (src=0x311af420, FFT=0x30e6a2e0) at /home/hxjd/src/src_shake/main/common/gpcalc.c:12
12 return gp_py_invoke_script_with_params(src, FFT, pyFileFFT, pModule, pDict);
(gdb) nextProgram received signal SIGTRAP, Trace/breakpoint trap.
Program received signal SIGTRAP, Trace/breakpoint trap.
Program received signal SIGTRAP, Trace/breakpoint trap.
Program received signal SIGTRAP, Trace/breakpoint trap.
Program received signal SIGTRAP, Trace/breakpoint trap.
Step3.内存实时刷新
打开第三个终端:(内存总量实时刷新)
top -p PIDofApp
示例:
top - 16:52:06 up 2 days, 3:49, 0 users, load average: 0.28, 0.23, 0.18
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.3 sy, 0.0 ni, 99.4 id, 0.1 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 7990060 total, 162744 free, 6306644 used, 1520672 buff/cache
KiB Swap: 8388604 total, 8387572 free, 1032 used. 1024572 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
130565 root 20 0 256108 52044 10152 S 0.0 0.7 0:05.85 gdb
重点追踪RES列