我对以下问题感到困惑:如何保持“静态”标签的优势,但仍然能够在现场调试生产代码?静态与非静态函数 - 调试嵌入式系统上下文
在客户现场并没有发生意外的行为,只有在那里。在许多情况下,选择执行调试可以节省很多工作量并提供非常快速的响应。这样的调试通常涉及检查函数行为,这将我们带入“静态”定义。
静态函数无法从调试shell进行调试,如放置断点或执行它。另一方面,将所有函数定义为公共导致代码结构和优化悲伤。
我知道像编译至少两个不同的构建,一个与静态和一个没有,但这很适合自动化测试,而不是最终生产构建,最终熄灭。
会从你身边感谢你的一些见解,主要是你如何解决(如果有的话)这个困境。或者将问题改写为:“什么更重要?”
关于“静态”的一个很好的讨论C here。
你的意思是你不能在声明为'static'的函数中设置断点?在C中,“静态”函数只是普通函数,但不能从其他“翻译单元”调用。除非它们已经被优化掉,否则任何东西都不应该阻止它们的调试,远程或本地调试。 – 2012-03-08 09:27:22
您可以定义一个指向您的静态函数的全局指针,并使用它的值来设置静态函数的断点。你甚至可以把这个指针设置为volatile,以防止编译器将其作为未使用的消除。 – 2012-03-08 10:05:56
@JoachimPileborg据我所知,静态函数不会进入符号表(即使使用编译器标记),因此,调试是不可能的(如断点)。 – EdwardH 2012-03-08 10:35:41