我正在调试我的程序,它有时会破坏堆栈变量的值。我的环境是linux上的arm64。在我调用另一个函数
A
之后,它发生在函数B
内部-堆栈在返回时被破坏。
我确切地知道哪个变量发生了变化(它是
std::string_view
类型并且它的长度变得非常大(72057594037927940),我可以在~30分钟内重现它一次并且只能使用-O2
标志。问题是当我输入A
在 gdb 中,我看到它的所有局部变量都被“优化掉”了。
B
之前添加的堆栈部分发生了损坏?任何想法如何找到根本原因?现在我可以通过在调用
str.size() > 10
之后检查
B(...)
来捕捉它的结果