gpt4 book ai didi

c - 静态与非静态函数 - 调试嵌入式系统上下文

转载 作者:太空狗 更新时间:2023-10-29 17:12:02 25 4
gpt4 key购买 nike

我对以下问题感到困惑:如何保持“静态”标签的优势,同时仍然能够在现场调试生产代码?

意外行为不会在客户现场发生,而且只会发生在客户现场。在许多情况下,具有执行调试的选项可以节省大量工作并提供非常快速的响应。这样的调试通常涉及检查函数行为,这将我们带到“静态”定义。

不能从调试 shell 调试静态函数,例如设置断点或执行它。另一方面,将所有函数定义为公共(public)函数会导致代码结构和优化问题。

我知道一些选项,比如编译至少两个不同的构建,一个有静态,一个没有,但这非常适合自动化测试,而不适合最终发布的最终生产构建。

Will 感谢您的一些见解,主要是您如何解决(如果有的话)这个难题。或者将问题改写为:“什么更重要?

关于 C 中“静态”的精彩讨论 here .

最佳答案

我认为根本问题不是“您是否使用‘静态’发送?”,而是“您是否准确测试了您发送的内容?”对于嵌入式代码,如果您在调试版本上进行大部分测试,然后发布使用不同选项编译的发布版本,那么您实际上是在向客户发布未经测试的代码。当您在靠近硬件的地方运行时,时序或内存访问模式的微小变化(优化器可以轻松引入)会导致系统行为发生巨大变化。

我目前的策略是发布 Debug 版本,在调试时配置尽可能多的优化。没有静态函数,使尽可能多的状态对调试器可见。

是的,我放弃了一些可能的编译器生成的效率,但只要我确保调试版本足够快以满足其要求,这就不是问题。结果是我发布的代码与我在整个发布周期中测试的代码完全相同——没有优化器产生的意外。

关于c - 静态与非静态函数 - 调试嵌入式系统上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9615231/

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