获取上次执行的返回语句的行

Get line of last executed return statement

本文关键字:返回 语句 执行 获取      更新时间:2023-10-16

是否可以在任何C/C++ 调试器中查看最后一个返回语句发生的位置?甚至是"返回堆栈",就像调用堆栈一样,但反过来?

bool foo(int bar)
{
if(bar == 1) return false;
if(bar == 2) return false;
return true;
}
void baz()
{
bool result = foo(4);
}

因此,在 baz 中调用 foo 之后,您可以看到 foo 中的三个返回语句中的哪一个被击中。

下面是一些用于C/C++的反向调试器,它们可以在调试会话中及时回退:

只有 Linux:
rr 来自 Mozilla
开源,真的快,记录痕迹小,要记录整个应用程序

撤消反向调试器
商业,没有RR那么快,记录迹线小,记录应用程序可以在任何地方开始

GDB逆向调试标准GDB来自GNU,可以记录小函数(有限(,开始调试,设置断点,然后开始记录,直到下一个断点,可以在这些点之间进行反向调试

未经我测试:
RogueWave TotalView Debugger
commercial,带有完整的 IDE

Windows 10(不支持7(
WinGDB反向调试
未测试,不能说太多。它似乎是唯一一个使用窗口的人

要补充的是,多线程可以由这些调试器处理,但前提是线程的执行被序列化到一个内核(伪平行化(。不能反向调试多核多线程应用程序。原因很简单,反向执行必须同步执行的线程,如果"同时"执行两个或多个线程,则无法做到这一点。