gdb调试coredump文件的有关问题

gdb调试coredump文件的问题
     开发了一服务程序,开发运行环境是(CentOS56.0(linux-2.6.2x), 开发语言c++,内部开了5个线程), 
编译时未加 -g选项。 该服务程序其中一重要功能是采用tcp通信方式接收发送数据(从本机其他进程接收,发送),
在运行一段时间后,发现程序运行时不是很正常,有一些TCP数据信息包未能接收到。
      该服务程序并未崩溃,还是在正常运行。然后,我通过运行gcore pid的方式产生一个coredump文件,
 之前已经通过 ulimit -c unlimit 命令取消了coredump文件大小的限制,使用gdb 去分析coredump文件,
 可以查看到全局变量的地址与内容,但是对于main函数内的局部变量的地址与内容则无法查看。
      例如,我通过重新编译该服务程序,输出并知道了main函数内的局部变量conns的地址为0xbf9989dc,
  使用再使用gdb去分析coredump文件,使用命令 x/d 0xbf9989dc 命令去查看变量conns的数值,
  但是gdb报告 cannot acccess memory at address 0xbf9989dc,无法访问该地址。
  请问,该如何通过该coredump文件得到main函数内的局部变量的数值?先谢谢各位的关注与帮助。
------解决思路----------------------
两个不同的进程,一个进程里面的变量的地址拿到另一个进程里面来用,地址是有效的吗?
编译的时候不加-g,似乎gdb也看不到什么有用的信息。
------解决思路----------------------
你可以直接gdb attach到哪个进程上去,用bt查看调用堆栈,然后用frame跳到main那个frame,在这个frame里面你就可以查看main的所有变量了。gcore也是用gdb attach上去再把该进程的所有东西导出来的。你既然把coredump导出来了,用gdb上去也是可以bt查看调用堆栈,再frame跳到main的frame,分析过程跟直接gdb attach上去一样。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

你可以直接gdb attach到哪个进程上去,用bt查看调用堆栈,然后用frame跳到main那个frame,在这个frame里面你就可以查看main的所有变量了。gcore也是用gdb attach上去再把该进程的所有东西导出来的。你既然把coredump导出来了,用gdb上去也是可以bt查看调用堆栈,再frame跳到main的frame,分析过程跟直接gdb attach上去一样。


谢谢 wangzuxi 的指点,因为这个服务软件是有启动3个线程的 ,对coredump文件也使用过bt查看调用堆栈,是停留在某个
工作线程上,调用堆栈不是main主线程的堆栈,请问如何frame到main的frame呢?谢谢!

你可以用thread命令切换到主线程啊

先info threads看一下有多少个线程,然后再thread id到主线程