在X86上用gdb设置带函数入参判断的条件断点

        最近在X86虚拟机上调试单板代码,使用gdb的时候遇到一个问题。

        有时候我们为一个函数设置断点,但是这个函数被调用到的频率太大,会频繁的被断住,实际上只需要一些特殊的情况才需要停住, 这就需要在断点处进行条件判断。

如果需要判断的是一个全局变量,则可以这样:

  b   func if g_val=0      //当全局变量为0的时候,才会在func的入口处停止。

或者是一个全局地址:

  b func  if  *(int*)address=0    //当地址address的int型数据为0的时候,才在func的入口处停止。

    但是如果你想判断一个函数入参的时候,如果这样做:

   b func if p1=0   //p1是func(int p1, int p2, int p3, int p4)的第一个入参名。

  会返回错误:

    No symbol "p1" in current context.

  为什么?这是因为p1是一个临时变量,你在进行断点设置的时候(进行全局动作)这个参数不存在的。

 

   那么怎么对函数的输入参数进行判断呢? 这需要先了解一下不同平台的函数调用和参数传递规则。

   如果是我们熟悉的arm板上,则很明了,一般对r0-r3寄存器值进行判断就好了,但是在x86上该怎么做呢?

   首先,看下面这篇文档了解下基本概念:

   

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值