C 除了将局部变量复制到内存位置或将其定义为静态变量外,是否有其他方法可以监视运行的实时软件上的局部变量?

C 除了将局部变量复制到内存位置或将其定义为静态变量外,是否有其他方法可以监视运行的实时软件上的局部变量?,c,optimization,real-time,simulink,execution-time,C,Optimization,Real Time,Simulink,Execution Time,例如: int Global; void outputFunction(void) { int local1; int local2; local1 = 10; local2 = 5 + local1; Global = local2; } 在前面的示例中,local1和local2不在范围内。 我正在使用实时软件(由simulink coder生成),我需要找到一种方法将信号(1到5000)作为本地信号使用,这样我就可以从高执行或周转时间中获益,但同

例如:

int Global;

void outputFunction(void) {
    int local1;
    int local2;
    local1 = 10;
    local2 = 5 + local1;
    Global = local2;
}
在前面的示例中,
local1
local2
不在范围内。 我正在使用实时软件(由simulink coder生成),我需要找到一种方法将信号(1到5000)作为本地信号使用,这样我就可以从高执行或周转时间中获益,但同时我需要在代码执行时随时访问任何信号。
如果在每个局部变量赋值后添加标签和NOP,我考虑在运行时重写。在运行期间,找到覆盖这些NOP的方法,将寄存器移动到作用域寄存器,如%%xmm7。

我的答案是,不,除非您有一个带有高端调试器/数据记录器的套接字处理器,该处理器允许完全访问所有寄存器和内存。这可能会非常昂贵,至少要花费1万美元,如果您的应用程序必须生活在恶劣的环境中,那么它的价值微乎其微。如果这是生成的代码,我强烈建议不要在代码生成后编辑它。这可能会在以后尝试重新创建以前的构建时带来各种乐趣,除非您对开发非常严格,这在研究和开发中是罕见的。:-)

事实上我找到了一种方法,但它相当复杂。在每个局部变量赋值后,可以通过标签编辑代码。像localVariable=10;asm volatile(“L_localVariable:”);asm volatile(“.global L_localVariable”);然后你可以反汇编代码,然后写一个脚本来检查这个标签上分配的寄存器和标签后面的字节数。编写一个函数,通过跳转到一个函数来覆盖标签后的字节数,在这个函数中,您可以将该寄存器复制到内存位置(全局变量),然后您可以查看它;-)