【发布时间】:2020-04-11 18:46:25
【问题描述】:
是否有可能在任何 C/C++ 调试器中查看最后一个 return 语句发生的位置?甚至是“返回堆栈”,例如调用堆栈,但反过来呢?
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 中的三个 return 语句中的哪一个被命中了。
【问题讨论】:
-
如果您将
if语句和return语句拆分为单独的行,在调试器中逐行运行时您可以很容易地看到它。或者,如果您的真正问题像这个一样简单,您可以在函数中检查bar的值。 -
如果你将返回语句放在不同的行上,你可以在这些行上设置断点。
-
是的,我现在就是这样做的。但是,如果您不必编辑代码并在每个 return 语句上放置断点,那将会很方便。我经常在一个循环中多次调用同一个函数,我不想单步执行所有这些。
-
题外话,因为您使用的是 Visual Studio,但是有反向调试器,可以让您及时退回,然后显示哪个返回语句被击中。 windows下可以看WinGDB时间旅行调试,linux下可以看github上的rr,undo.io(商业)或者gdb,它有小的反向功能。
标签: c++ c visual-studio debugging