You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下GDB调试无调试信息二进制:如何在puts调用前断住不进函数

解决GDB在调用puts前断住的问题

直接b puts会断在puts函数的入口处,所以会进入函数内部。要在调用puts的指令执行前断住,有两种可行方法:

方法一:使用捕捉点自动拦截调用

GDB的catch call命令可以在函数被调用的指令处(进入函数前)触发断点,适合无调试信息的二进制:

gdb> catch call puts
gdb> r

程序会在第一次执行call puts指令时停下,此时还未进入puts函数,用x/i $pc可以看到当前指令就是call puts。

方法二:手动定位调用点并设置断点

如果需要精准定位某一处调用:

  1. 先断在main函数入口:
    gdb> b main
    gdb> r
    
  2. 反汇编main函数,找到其中调用puts的指令地址:
    gdb> disassemble main
    
    输出里会找到类似call 0xxxxxxx <puts>的行,记录该call指令的地址(比如0x55555555476a)。
  3. 在该call指令地址设置断点:
    gdb> b *0x55555555476a
    gdb> c
    
    程序会停在执行该call指令前,未进入puts函数。

内容的提问来源于stack exchange,提问作者Alexander Haas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 13:15:19