最近使用GDB调试程序的一点经验之谈:
1、程序运行中生成一个Core文件便于保护现场,调试程序,gcore可以满足这种需求:
gcore:对正在运行的进程生成一个内存转储文件,方便保护现场。例如:
– gcore -s -c test.core pid
– 用-s选项使进程在转储过程中处于停止状态,可以保证转储文件的一致性。若不用-c选项指定转储文件名,则会使用默认的core.pid形式的文件名。
2、我的linux虚拟机中调试程序时,发现直接run程序没问题,但gdb调试的时候就提示找不到某个动态库
原因如下:
1)我的虚拟机里同一个用户下由于要编译测试多个不同版本的代码,而每个版本都有不同的运行环境(如:PATH、LD_LIBRARY_PATH等环境变量设置)
2)我目前使用csh,为了快速切换不同的编译环境,我把运行环境所需的环境变量写到不同的.cshrc脚本中,需要切换时运行source .cshrc_XXX
3) GDB调试程序时会启一个新的shell,而且新shell启动时使用默认的.cshrc脚本,从而导致上述的问题,从本质上来说GDB使用的shell的环境非我们要调试程序所需的shell环境设置
解决方法:
1)最简单:将所有动态库的查找位置都设置到默认.cshrc中的LD_LIBRARY_PATH的环境变量中
2)其他方法有待探索