V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
paparika
V2EX  ›  C

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

  •  
  •   paparika · Sep 2, 2019 · 4826 views
    This topic created in 2429 days ago, the information mentioned may be changed or developed.

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

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

    程序 C 肯定不可能是 A+B 把代码放一起就完事,一定有一些跟 A 和 B 都不同的逻辑。问题出在 caller C 上,跟 libA libB 应该都没关系
    paparika
        4
    paparika  
    OP
       Sep 2, 2019
    程序 c 里,我基本上就是 main 一进来就调 libA 的函数,别的什么都不做,也崩溃了
    ace00010
        5
    ace00010  
       Sep 2, 2019
    单独跑 AB 都没问题的,混合到你的 C 代码就出现了,特定位置出现就用 gdb 调试吧,快很多
    chinuno
        6
    chinuno  
       Sep 2, 2019 via Android
    怎么觉得你这是 ab 有同名符号,调用 a 的时候子调用调到 b 的东西去了
    augustheart
        7
    augustheart  
       Sep 2, 2019
    内存管理那块出问题吧
    xe2vherd
        8
    xe2vherd  
       Sep 2, 2019
    Valgrind 看下有没有内存问题
    benson458
        9
    benson458  
       Sep 2, 2019 via iPhone
    以前遇到过类似的情况,liba 和 libb 都是动态库。然后把这两者编译成静态的,再一起编译到 C,就好了
    nicevar
        10
    nicevar  
       Sep 2, 2019
    最后应该发现是命名问题导致的
    hsuehsen
        11
    hsuehsen  
       Sep 2, 2019
    1. 名字污染
    2. 内存越界
    3. 或者,堆或栈溢出
    katsusan
        12
    katsusan  
       Sep 2, 2019 via iPhone
    debug 一下生成的 core 文件看看
    SelFree
        13
    SelFree  
       Sep 2, 2019
    stl ?
    hxndg
        14
    hxndg  
       Sep 2, 2019
    那你无头绪以后有没有单步跟踪,断点追查呢?
    GDB 啊
    paparika
        15
    paparika  
    OP
       Sep 2, 2019
    @hsuehsen @katsusan @hxndg
    调用 libA 后崩溃了,但是 libA 是别人提供的,我这边没法进到里面单步。core 文件看过了,看不到崩溃栈信息,只显示了崩溃函数地址,通过 addr2line 看到崩在 c 标准库里了(这里不清楚为啥 core 看不到崩溃栈调用关系,跟 libA 是否 strip 有关吗?)
    ilotuo
        16
    ilotuo  
       Sep 2, 2019
    装个 backtrace 看下
    b00tyhunt3r
        17
    b00tyhunt3r  
       Sep 4, 2019 via iPad
    进 liba libb 找找有没有同名全局变量,强符号
    paparika
        18
    paparika  
    OP
       Sep 4, 2019
    @b00tyhunt3r 有啥辅助工具吗,里面有很多库,每个库又有很多命名
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3574 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 11:09 · PVG 19:09 · LAX 04:09 · JFK 07:09
    ♥ Do have faith in what you're doing.