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

这是我程序中的一个function

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; 

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

我想你正在寻找一步

Step Over与Step Into相同,只是当它到达另一个程序的调用时,它不会进入该过程。 该过程将运行,您将进入当前过程中的下一个语句。

  • 引自http://www.developerfusion.com/article/33/debugging/4/

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

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

 b  

将设定一个断点

 c 

将持续到下一个断点。

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

 b  

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

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

或者您可以在输入后键入finish以退出partitionfunction。