多个调试器关闭一个断点

时间:2017-03-09 23:09:58

标签: debugging greenhills

有没有人见过多调试器错误的行号或断点被一个断点?

我有一个MULTI脚本(scripty.rc),它经历了一个依赖于在程序结束时遇到断点的过程。该程序以两个循环之一完成:

:failure
6648 NOP 
6649 b failure ; You are a failure

:complete
6650 NOP 
6651 b complete ; Your program worked, rejoice

所以我应该打破6649或6651,为用户打印一行,让他们验证一切都是hunkydory。

BUT。

它在6651没有突破。至少并非总是如此。在午餐之前我确定一切正常,我看到它就像我想要的那样。午餐后,当我用HW人员演示它时,它打印出来的行是6650 NOP。喜欢什么鬼?真?你在我演示的那一刻你背叛了我?

我验证软件是否相同,并不是一些偷偷摸摸的提交。

我验证脚本是一样的。它不像是设置了不同的断点。

我用断点做数学运算。在脚本中它是bp _start#2135,是的,_start在4516.是的,经过一些深入的分析,4516 + 2135 = 6651。

我看到它早些时候出现在右边。

我很想把这个与白痴的不健康关系弄清楚。解决方法很简单,但是非确定性调试器听起来很可怕,我想将它运行到地面。有没有人见过多调试器错误的行号或断点被一个断点?任何人都知道它还能是什么?我搞砸了一些简单的东西吗?

1 个答案:

答案 0 :(得分:1)

我找到了这个。这确实很愚蠢。

这就是MULTI的工作方式。设置断点时,它会以procedure#123的形式记录。 123是从程序开始的偏移量。我拥有的这个可爱的工具是用ASM编写的,所以只有_start

MULTI计算从1开始的程序行。看一下MULTI调试器的左侧。这也在帮助文件中" MULTI:调试源窗格"。最左边的数字列是文件行号。右边的那个是"程序相对行号"。

因此proc#1处的分解并未在程序行+1处中断,而是在程序的第一行处中断。这不是真正的抵消。我没有打破4516 + 2135,而是希望突破4516 +第2136指令。我不知道b _start#0会做什么。

在填写错误报告和在这里提问时,还有一个关于不要偷懒的重要教训。在上面我输入了行号,但省略了程序编号,认为它们并不重要。