求助一个无头绪排查的段错误问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
paparika
V2EX    C

求助一个无头绪排查的段错误问题

  •  
  •   paparika 2019-09-02 09:35:51 +08:00 4621 次点击
    这是一个创建于 2307 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前有两组库 libA 和 libB,分别单独编译到程序 A 和 B 中,均运行正常,但是把 libA 和 libB 一同编译到程序 C 中,且只调用 libA 的函数,运行到特定位置后会报段错误,可能是什么原因,如何排查?

    18 条回复    2019-09-04 14:01:36 +08:00
    wutiantong
        1
    wutiantong  
       2019-09-02 09:59:27 +08:00
    太多原因了,你的描述里几乎没提供什么有效信息啊。
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       2019-09-02 10:13:58 +08:00
    “把 libA 和 libB 一同编译到程序 C 中” 隐藏了关键信息
    GeruzoniAnsasu
        3
    GeruzoniAnsasu  
       2019-09-02 10:16:12 +08:00
    (手滑)

    程序 C 肯定不可能是 A+B 把代码放一起就完事,一定有一些跟 A 和 B 都不同的逻辑。问题出在 caller C 上,跟 libA libB 应该都没关系
    paparika
        4
    paparika  
    OP
       2019-09-02 10:19:49 +08:00
    程序 c 里,我基本上就是 main 一进来就调 libA 的函数,别的什么都不做,也崩溃了
    ace00010
        5
    ace00010  
       2019-09-02 10:19:56 +08:00
    单独跑 AB 都没问题的,混合到你的 C 代码就出现了,特定位置出现就用 gdb 调试吧,快很多
    chinuno
        6
    chinuno  
       2019-09-02 10:26:06 +08:00 via Android
    怎么觉得你这是 ab 有同名符号,调用 a 的时候子调用调到 b 的东西去了
    augustheart
        7
    augustheart  
       2019-09-02 10:36:03 +08:00
    内存管理那块出问题吧
    xe2vherd
        8
    xe2vherd  
       2019-09-02 12:25:07 +08:00
    Valgrind 看下有没有内存问题
    benson458
        9
    benson458  
       2019-09-02 12:28:30 +08:00 via iPhone
    以前遇到过类似的情况,liba 和 libb 都是动态库。然后把这两者编译成静态的,再一起编译到 C,就好了
    nicevar
        10
    nicevar  
       2019-09-02 13:37:09 +08:00
    最后应该发现是命名问题导致的
    hsuehsen
        11
    hsuehsen  
       2019-09-02 15:33:28 +08:00
    1. 名字污染
    2. 内存越界
    3. 或者,堆或栈溢出
    katsusan
        12
    katsusan  
       2019-09-02 16:04:42 +08:00 via iPhone
    debug 一下生成的 core 文件看看
    SelFree
        13
    SelFree  
       2019-09-02 16:48:20 +08:00
    stl ?
    hxndg
        14
    hxndg  
       2019-09-02 17:46:21 +08:00
    那你无头绪以后有没有单步跟踪,断点追查呢?
    GDB 啊
    paparika
        15
    paparika  
    OP
       2019-09-02 17:58:57 +08:00
    @hsuehsen @katsusan @hxndg
    调用 libA 后崩溃了,但是 libA 是别人提供的,我这边没法进到里面单步。core 文件看过了,看不到崩溃栈信息,只显示了崩溃函数地址,通过 addr2line 看到崩在 c 标准库里了(这里不清楚为啥 core 看不到崩溃栈调用关系,跟 libA 是否 strip 有关吗?)
    ilotuo
        16
    ilotuo  
       2019-09-02 18:16:33 +08:00
    装个 backtrace 看下
    b00tyhunt3r
        17
    b00tyhunt3r  
       2019-09-04 09:39:24 +08:00 via iPad
    进 liba libb 找找有没有同名全局变量,强符号
    paparika
        18
    paparika  
    OP
       2019-09-04 14:01:36 +08:00
    @b00tyhunt3r 有啥辅助工具吗,里面有很多库,每个库又有很多命名
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2708 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:08 PVG 22:08 LAX 06:08 JFK 09:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86