1.linux下,如何debug查看内存泄露问题?
在linux系统中可以使用top命令实时显示系统中进程的内存使用情况。free命令显示了系统中空闲和已使用的内存。
使用valgrind是一个强大的内存调试和分析工具,它可以检测内存泄漏和其他内存相关的问题。
'''valgrind --leak-check=yes --show-leak-kinds=all --track-origins=yes ./your_program'''
massif是valgrind的一部分,用于分析程序的堆栈使用情况
'''valgrind --tool=massif --stacks=yes ./your_program'''
2.在多线程程序的调试中如何使用gdb切换到某线程栈帧,查看寄存器值?
gdb中使用info thread查看所以的线程信息,thread 线程id 切换到对应的线程中,使用frame 栈帧id 切换到对应的我栈帧中。info registers 寄存器名 命令查看对应寄存器的值。
gdb的其他命令:bt 查看函数调用堆栈信息,用于发生段错误时,追踪错误。 breakpoint 行数 对应行打断点也可用 b+行数。r重新运行,q推出,n或者s逐行运行,s是单步步入,n单步跳过。
c继续运行。watch+变量名 当被监控变量/表达式的值发生改变时。程序停止运行,p 变量 查看变量值。display 变量名,每运行一次都打印变量值。
info inferiors 查看所以进程,inferiors
3.如何分析生成的core文件?
ulimit -a 可以查看core文件生成选项是否打开。如果未打开,使用 ulimit -c unlimited 打开。但是这只是临时打开,如果需要永久打开,需要在自己的用户目录下.bashrc文件内加上这段命令。
然后使用gdb -c
4.gcc和g++的区别有哪些?
gcc:C语言编译器,默认编译C代码,编译C++时需要手动链接C++库。
g++:C++语言编译器,默认编译C++代码,自动链接C++标准库。