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.
工具/软件: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收到“无法获取符号的地址”错误。
有人能帮我解决这个问题吗?
Dan,
我正在使用其他设备,但我认为我仍然可以显示正在发生的情况。
在我的情况下,我使用的是C,但我创建了一个函数john(),它的功能与C++方法中的功能相同。
在使用缺省生成选项的CCS中,我不能在John()内的任何源代码行上设置断点,而不能在结束大括号中设置断点,因为它已经过优化。 当我查看拆卸时,我可以看到转储标签已应用到该端托架上。
通过查看变量视图,我可以看到Local不存在,如果我将其显式添加到表达式视图,它将告诉我它不存在:
因此,如果我尝试从DSS访问该变量,我将收到相同的错误。
现在,如果我将本地代码更改为易失性代码,则它将不会被优化。 现在我可以在John()内设置断点,我可以看到有与源代码行关联的汇编代码:
如果我在变量和表达式视图中查看,我可以看到局部存在:
如果我尝试在ASM()行上设置断点,它将在本地++行之后设置断点,这是有意义的。
此致,
John