栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

调试客户包装盒上生成的核心文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

调试客户包装盒上生成的核心文件

当从Linux发行版生成核心文件而不是我们在Dev中运行的核心文件时,会发生什么情况?堆栈跟踪是否有意义?

如果可执行文件是动态链接的,就象您的动态链接一样,GDB生成的堆栈(很可能) 没有 意义。

原因:GDB知道您的可执行文件通过

libc.so.6
在address处调用某个东西而崩溃了
0x00454ff1
,但它不知道该地址上的代码是什么。因此,它将查看
您的 副本,
libc.so.6
并发现该副本位于中
select
,因此将其打印出来。

但是

0x00454ff1
在您的 客户 副本中选择的机会也
libc.so.6
很小。顾客很可能在那个地址有其他程序
abort

您可以使用

disasselect
,然后观察它
0x00454ff1
是否在指令中间,或者上一条指令不是
CALL
。如果这些条件之一成立,那么您的堆栈跟踪将毫无意义。

但是,您 可以 自助:您只需

(gdb) info shared
要从客户系统中获取列出的所有库的副本。让客户将它们焦油起来

cd /tar cvzf to-you.tar.gz lib/libc.so.6 lib/ld-linux.so.2 ...

然后,在您的系统上:

mkdir /tmp/from-customertar xzf to-you.tar.gz -C /tmp/from-customergdb /path/to/binary(gdb) set solib-absolute-prefix /tmp/from-customer(gdb) core core  # Note: very important to set solib-... before loading core(gdb) where      # Get meaningful stack trace!

然后,我们建议客户运行-g二进制文件,以便于调试。

一个 更好的方法是:

  • 与建立
    -g -O2 -o myexe.dbg
  • strip -g myexe.dbg -o myexe
  • myexe
    发给客户
  • 当客户得到时
    core
    ,用于对其
    myexe.dbg
    进行调试

您将拥有完整的符号信息(文件/行,局部变量),而不必向客户发送特殊的二进制文件,也无需透露太多有关源的详细信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403058.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号