【问题标题】:how to skip a portion while debugging a recursive function with gdb如何在使用 gdb 调试递归函数时跳过一部分
【发布时间】:2011-09-19 16:31:20
【问题描述】:

这是我程序中的一个函数

void
quicksort (int *num, int p, int r, int june)
{
  int q, bbc, ccd;
  if (p < r)
    {
      call++;
      q = partition (num, p, r, june);//<--I want to skip this call in gdb session
      bbc = q - 1 - p + 1;//<-- and want to continue execution step by step from here
      quicksort (num, p, q - 1, bbc);
           ccd=r-q+1;
      quicksort (num, q + 1, r, ccd);
    }
} //since it is a recursive function each time quicksort is called partition is also executed I want to focus my debugging only to quicksort

如果你注意到它在两者之间调用另一个函数分区。在 gdb 会话中运行时 我想跳过显示分区步骤的 gdb,即我知道函数分区是正确的,所以执行分区的操作,然后跳转到下一条指令

     bbc = q - 1 - p + 1;

并且在我的调试会话中不显示有关分区的信息。 那么如何跳过该部分并继续调试快速排序。

【问题讨论】:

    标签: c debugging gdb


    【解决方案1】:

    我认为您正在寻找一个超越

    Step Over 与 Step Into 相同, 除了当它到达一个调用 另一个程序,它不会步进 进入程序。该程序将 跑,你会被带到 当前中的下一条语句 程序。

    在 GDB 中,您可以通过发出 next 命令来执行此操作。 当您在 gdb 中运行 q = partition (num, p, r, june); 行时,输入 next 它将只执行分区函数,而无需详细了解其代码。

    您可以在此reference 中找到有关单步执行 gdb 的详细信息。

    【讨论】:

    • Silveria 你提到的事情没有发生,它实际上是在分区函数内部,这就是我发布这个问题的原因。
    • @Registered User 你在用什么,nextstep
    • Silveria man 我之前的评论错了。感谢你我已经能够调试我从早上开始就忙的递归函数。为此 +1。
    【解决方案2】:
    b <line number>
    

    会设置断点

    c
    

    将一直持续到下一个断点。

    【讨论】:

      【解决方案3】:

      你可以为partition之后的行设置断点:

      b <line number>
      

      然后使用c 继续直到断点。

      或者您可以使用n 跳过partition 调用(即在到达partition 调用时键入n,它将跳过函数体)。

      或者你也可以输入finish,输入后退出partition函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-21
        • 1970-01-01
        相关资源
        最近更新 更多