This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/DRA744:DSS - getAddress on local variable and private class variable error (DSS - getAddress on local variable和private class variable错误)

Guru**** 1993015 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/627735/ccs-dra744-dss---getaddress-on-local-variable-and-private-class-variable-error

部件号:DRA744

工具/软件:Code Composer Studio

我在使用TI DSS调试脚本时遇到了问题。 我的代码基于C++,使用TI模拟器,我尝试在类函数内的ASM标签上设置断点,并且:
读取本地变量地址
读取私有类变量地址

我可以设置断点,但在尝试读取变量地址时,就好像它们不在范围内一样。
我的代码看起来像这样(编译时没有优化):

MyClass.h:

类MyClass

私人:
      int m_var;
公开:
      MyClass():m_VAR(0){}
      作废钙化(void)
      {
              内部本地= 0;
              本地++;
              asm (".global dump\ndump:");//断点标签
                本地++;
       }
}

我的DSS脚本如下所示:

VAR脚本= ScriptingEnvironment.instance();
ds = script.getServer("DebugServer.1");
增值经销商DS;
ds.setConfig(...);//模拟器
var debugSession0 = DS.openSession(".*_0");
debugSession0.target.connect();
debugSession0.memory.loadProgram(...);
var pcsave = debugSession0.symbol.getAddress("dump");
debugSession0.breakpoint.add(pcsave);
debugSession0.target.run();

debugSession0.target.waitForHalt();
IF (debugSession0.expression.Evaluate ("pc")== pcsave)

   打印(pcsave)
   var my_address = debugSession0.symbol.getAddress("local");
   打印(my_address);
   var my_address = debugSession0.symbol.getAddress("this->m_var");//也尝试了(*this).m_var,并使用.expression.evaluate
   打印(my_address);
   debugSession0.target.run();
}


大概调试器应该在断点停在标签处时看到这两个变量,它们应该在范围内,但我从„DSS收到“无法获取符号的地址”错误。

有人能帮我解决这个问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Manfred,

    如果您在CCS中手动执行相同的操作,即在ASM()语句中设置断点,您在变量视图中是否看到LOCAL?  我问的原因是,如果我在编译器中有优化功能,除非我在local声明前面有volatile,否则优化功能将被优化。

    此致,
    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,John:

    我遇到了这个问题,CCS根本不允许我在ASM(".global dump\ndump:");行上设置断点。 有了DSS,程序停止时似乎会采取一些措施,我可以读取全局变量。

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Dan,

    我正在使用其他设备,但我认为我仍然可以显示正在发生的情况。

    在我的情况下,我使用的是C,但我创建了一个函数john(),它的功能与C++方法中的功能相同。

    在使用缺省生成选项的CCS中,我不能在John()内的任何源代码行上设置断点,而不能在结束大括号中设置断点,因为它已经过优化。  当我查看拆卸时,我可以看到转储标签已应用到该端托架上。

    通过查看变量视图,我可以看到Local不存在,如果我将其显式添加到表达式视图,它将告诉我它不存在:

    因此,如果我尝试从DSS访问该变量,我将收到相同的错误。

    现在,如果我将本地代码更改为易失性代码,则它将不会被优化。  现在我可以在John()内设置断点,我可以看到有与源代码行关联的汇编代码:

    如果我在变量和表达式视图中查看,我可以看到局部存在:

    如果我尝试在ASM()行上设置断点,它将在本地++行之后设置断点,这是有意义的。

    此致,

    John