如何在使用gdb调试递归函数时跳过一部分

时间:2011-06-21 16:09:33

标签: c debugging gdb

这是我程序中的一个功能

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向我展示parition的步骤,即我知道函数分区是正确的,所以做分区的工作,然后跳转到下一条指令

     bbc = q - 1 - p + 1;

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

3 个答案:

答案 0 :(得分:3)

我认为您正在寻找跨越

  

Step Over与Step Into相同,   除了当它达到呼叫时   另一个程序,它不会步骤   进入程序。程序会   跑,你将被带到   当前的下一个陈述   程序。

     

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

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

答案 1 :(得分:2)

b <line number>

将设置一个断点

c

将持续到下一个断点。

答案 2 :(得分:1)

您可以在partition之后为该行设置断点:

b <line number>

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

或者您可以使用n跳过partition来电(即,当您到达n来电时输入partition,它会跳过功能)。

或者您可以在输入后输入finish退出partition功能。