首页 » Web前端 » Php网页callstack技巧_轨范调试之call stack window

Php网页callstack技巧_轨范调试之call stack window

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

我们知道,当程序调用一个函数时,会记录当前位置,然后实行被调用函数,实行完后返回程序。
从被调用函数返回时,为什么能找到离开程序时的位置呢?由于程序会持续跟踪调用堆栈(call stack)。

调用堆栈call stack,是将当前生动函数(active function)的信息,以堆栈的形式进行记录。
每当一个函数被调用,就在堆栈顶部压入(push)一条调用信息,包括调用入口和返回时确当出路序的位置。
当一个函数实行完毕,返回程序后,这个函数的堆栈信息就会被弹出(pop)。
calll stack里面保留的是程序实行到某个时候所有正在被调用函数的信息。

Php网页callstack技巧_轨范调试之call stack window

在IDE中集成的调试器中,也可以不雅观察call stack,这个工具称为 call stack window(调用堆栈窗口)。
以VS为例,打开call stack window的方法是:可以通过Debug菜单> Windows > call stack打开call stack window。
当然,必须处于调试状态才能激活此窗口。

Php网页callstack技巧_轨范调试之call stack window
(图片来自网络侵删)

#include <iostream> void funcA(){std::cout << "functon A is called .\n";}void funcB() {std::cout << "functon B is called.\n";funcA();}int main(){funcA();funcB();}

设置断点于line5、line10,碰着line 5的断点时call stack window里面的信息

程序在第5和10行设置了断点。
启动调试后,程序实行到第一个断点line5,这时按上面步骤打开call stack window, 可以看到里面显示了两个当前生动的函数main() 和funcA()。
由于是采取堆栈,最底下的函数是先调用的,上面的函数是后调用的。
funcA() Line5中的line5表示当前函数实行的语句的位置(即下一条要实行的语句),main() line17中的line17表示实行完funcA()后返回main()时的位置(即下一条要实行的语句)。

当连续调试,单步实行到main()中的funcB()时,利用step into进入funcB()内,funcB()中调用funcA(), 连续利用step into进入funcA()内,碰着断点停下,这时的call satck window显示的信息如下:

call stack window显示当前生动的函数有三个

从中可以看出,当下main()调用funcB(), funcB()又调用funcA(), 每个被调用函数的入口和返回调用函数的位置都以堆栈的形式记录了下来。

【小结】本文先容了集成调试器中的call stack window工具的用法,将breakpoint和call stack window结合起来利用,可以不雅观察程序运行到设定的位置时,所有生动的函数情形。

标签:

相关文章