获取上次执行的返回语句的行
Get line of last executed return statement
是否可以在任何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反向调试
未测试,不能说太多。它似乎是唯一一个使用窗口的人
要补充的是,多线程可以由这些调试器处理,但前提是线程的执行被序列化到一个内核(伪平行化(。不能反向调试多核多线程应用程序。原因很简单,反向执行必须同步执行的线程,如果"同时"执行两个或多个线程,则无法做到这一点。
相关文章:
- 返回语句后的代码,没有警告
- 三元运算符在返回语句中给出意外的结果
- 返回非 void 的函数中没有返回语句警告
- 如何使用单个返回语句返回对变量的引用
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 获取上次执行的返回语句的行
- 返回语句中矢量初始化时出现编译错误
- 快速搜索链表未编译,需要返回语句
- 静态成员函数赋值而不带返回语句
- 在返回语句中构造对象时,std::move() 是否有助于或阻止 RVO?
- 为什么返回语句和打印语句返回不同的答案?
- C++ 非 void 函数的崩溃没有返回语句
- 在返回语句中嵌套条件运算符
- 为什么结构化绑定禁用RVO和移动返回语句
- C - 程序返回值而无需返回语句
- 返回语句中的构造函数语法
- 编译器遇到返回语句时会做什么
- 是一个单一的返回语句清洁器
- C NRVO/复制Elision在括号中带有返回语句
- C 编译器 - 被遗忘的返回语句