客户的服务器是redhat 9.2,放在一个没办法上网的局域网内,没有gcc,没有make,几乎没办法源代码的方式编译安装任何工具。应用程序在我笔记本上的centos 7编译调试好后,scp到目标服务器上跑,遇到段错误崩溃,很难调试,迫切需要在这台服务器上安装gdb或者valgrind。
gdb的拷贝安装:
从我的centos先拷贝可执行文件gdb,执行后会提示缺几个依赖库,将依赖的.so文件依次复制到redhat的/usr/lib64下。
最大的依赖问题是python2,将笔记本上的python2.7拷贝到目标机器的相应目录,然后配置环境变量:
export PYTHONPATH="/usr/lib64/python2.7/lib-dynload:/usr/lib64/python2.7/"
export PYTHONHOME="/usr/lib64/python2.7/"
就可以运行gdb调试崩溃时的吐核文件了。
如果是很复杂的多线程程序,还是很难定位具体的错误代码行,因为其它线程在前面出错时没有立即崩溃,但已经将堆栈破坏了。
这时候valgrind就是更好用的工具,虽然很慢,却可以提供更好的线索。
valgrind的拷贝安装:
valgrind其实简单,拷贝好可执行文件后,再将/usr/local/lib/valgrind/带目录完整复制到目标机器的相同位置下就可以了。