gpt4 book ai didi

c++ - 有没有办法在程序运行时更改 linux 上发布代码中的成员变量?

转载 作者:太空狗 更新时间:2023-10-29 21:28:55 26 4
gpt4 key购买 nike

我写了一个程序来解决某种优化问题。我一直在以越来越低的阈值运行它,我认为我遇到了某种障碍,因为我的程序无法获得更好的结果。它已经运行了大约 5 天......

但是,我在程序中有一些代码可以在数据好于阈值时保存它的数据。因为我没有兴趣再次运行它 5 天,所以我想在程序运行时执行它,但遗憾的是我没有使用 -g 编译它(我使用的是 gcc)。我想做的是将阈值更改为更高的值。

我确实设法使用 gdb 连接到它,并看到了堆栈框架。我现在在一个方法中,我想访问“this”指针以更改阈值参数。我尝试检查函数地址周围的值,但没有任何意义......我如何找出“this”指向的位置?

谢谢。

最佳答案

首先,您无需重新启动程序即可对其进行调试。

您应该使用完全您最初使用的相同源和标志重建它添加-g .这将为您提供一个包含调试信息的可执行文件,但在其他方面(几乎)与原始二进制文件相同。 nm a.out 的输出和 nm a.out.debug应该非常接近(可能存在一些细微差异,但可能不会影响调试)。现在运行 gdb a.out.debug <pid>并且您应该能够进行源代码级调试,并调整您的阈值。

如果失败,你仍然可以做你想做的事,但会更难:你必须在汇编级别做。您可以运行 a.out.debug (开始一个新任务),并在 GDB 中查看 disas输出如何将参数传递给您的例程,以及如何访问阈值。然后您可以返回到您的原始可执行文件,并观察那里发生的基本相同的事情。一旦知道阈值在内存中的位置,就可以在 GDB 中对其进行调整。

关于c++ - 有没有办法在程序运行时更改 linux 上发布代码中的成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com