我想我会变得疯狂...
当 IF 条件不满足时(所有变量都全局定义为 UINT32_t),如何可能触发此断点?

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.
我想我会变得疯狂...
当 IF 条件不满足时(所有变量都全局定义为 UINT32_t),如何可能触发此断点?

结果,我最近不得不提高编译程序的优化级别,以适应我的可用内存。
在较高的优化级别,似乎并非所有“允许”在代码行上设置断点的情况都会导致代码在代码的该点实际中断(WOW)。
我通过在 IF 语句之后放置一个断点来解决这一问题,然后在这第二个断点处断开后,很明显,如果 IF 语句事实上没有设置为零,那么在我的主体中设置为0的两个变量就会被设置为零。 因此,执行从未真正进入这种状况。
是否有人知道代码行可以放置在我的代码中的任何位置,以保证可以在该代码行上设置断点;如果断点在该行上触发,则代码执行实际上就在那里 (不仅仅是“粉碎”在那里破碎 ,也不像我的情况那样真正在那里破碎:) ?
这不是确定性的,但下面的代码可以帮助我找到一个在满足条件时实际中断的断点:

函数断点()简单返回 tdif+1,因此6个添加的行不会更改 tdif 的值。
只有一个 tdif=断 点()-1;行 无法获得真正的断点,因此我尝试了其中的6个,它运行正常,我没有时间隔离此解决方案。
编辑:我刚刚找到了另一种方法来使代码在那里正确断开。
我在变量'expectingbackfromexion'上写了一个'hardware watchpoint'。
我可以对可能发生的事情有所了解。 考虑这个有争议的例子……
int fxn(int arg)
{
if (arg)
{
return 10;
}
else
{
return 20;
}
}
我使用 TI ARM 编译器来构建它。 但是,就本例而言,这种细节并不重要。 其他编译器 可以 生成类似的代码。 这是在这种情况下生成的装配体代码...
fxn:
;* --------------------------------------------------------------------------*
CMP A1, #0 ; [DPU_V7M3_PIPE] |5|
ITE NE ; [DPU_V7M3_PIPE]
MOVNE A1, #10 ; [DPU_V7M3_PIPE] |5|
MOVEQ A1, #20 ; [DPU_V7M3_PIPE] |5|
BX LR ; [DPU_V7M3_PIPE]
由于 IT 指令 的使用方式,此代码中没有条件分支。 所有这些指令都将执行。 根据传入的 arg 值, 其中一个 MOV 指令不起作用。 假设您在其中一个 return 语句上设置了断点。 你会成功的。 但是,与这种回报相关的条件在特定时刻可能不会激活。
这是优化如何导致调试困难的示例。 有关此问题的详细信息,请参阅“ 调试与优化权衡”一文。
[引用用户 ID="294404" url="~ë/support/tools/cod-composer-studio -group/CCCS /f/code-composer-studio -forume/1079825/codecodposer-if-status-enter-without condition-bee-enter-it/3996562#3996562"]代码行中的任何人都可以知道代码的行/断点,并且可以在我的代码行中设置中,如果代码行中的任何人都能在代码行上,且代码真的可以在代码行中被放置在断点处[保证? 不是。 但我可以提出一个建议,它会经常发挥作用,值得尝试。 添加执行 nop 的 ASM 语句...
int fxn(int arg)
{
if (arg)
{
asm(" nop");
return 10;
}
else
{
asm(" nop");
return 20;
}
}
一般而言,应避免使用 ASM 语句。 我认为您只能临时使用它们,作为一种帮助调试的方法。 在这种情况下,我认为 ASM 语句正常。 生成的代码执行您所期望的分支。 您可以在 ASM 语句上设置断点。 这就是它将在很多时间内得到解决的方式。 但没有人能保证它始终有效。
[引用 userid="294404" url="~ë/support/tools/code-composer-studio -group/CCCS /f/code-composer-studio -forume/1079825/codecodposer-if-status-enter-abus-condition-bean-enter-it/3996656#3996656"我将变量/预期值写在“备份”上。我认为这是一个比使用 ASM 语句更好的解决方案。 尽管如此,了解多种方法是很好的。
谢谢,此致,
乔治
太棒了!! 我认为这将是我 在调试战争后将其撤回时从新的断点库部署的第一个断点武器。
谢谢,