【开发日志】第二十九周(2025.11.23) #46
Irissssaa
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
工作内容
本周会议推迟。
安排:
工作过程如下:
尝试重新创建新的环境,确实能够调试了,具体原因还不是很清楚。
处理调试一号进程时调试会话结束的问题:
调试到对应位置,当调试会话结束时,code-debug server 调试终端的内容如下:
可以得知崩溃的地方和原因。
当GDB返回的
Selected thread is running时会被判断为 error,而调试器代码会将 error 判断为很严重的错误,从而抛出异常崩溃。所以我们需要在调试器处理parsed.token的地方:onOutput 里拦截这个错误,把它的状态从 error 改成 done,就可以解决这个问题。Selected thread is running情况后,调试器能够成功命中一号进程的断点了,但是当一号进程执行完后,调试器自动结束了调试会话,回到调试器调试界面,终端提示:从内容中可以看到,GDB跟vscode说"Cannot execute this command while the selected thread is running.",这个其实和第二个问题是一样的,这说明GDB中有很多种关于线程在run的说法,那么为了处理这一种情况的多种说法,我们可以将在2问题中添加的那个判断的条件改成 “thread is running” ,进行宽泛的匹配。(除此之外,为了防止大小写的区别,我们也将msg的内容全部转换成小写)
根据报错提示和相应代码,我们得知,因为前面的修改,当 GDB 返回 线程在运行的信息时,我们将其修改成了 done,然而,GDB 并没有返回
register-values数据包,这就导致相应的函数无法取到对应的值,从而奔溃。因此对这个函数进行相应的调整即可。这个很明显就是第4个问题解决后导致的后续问题,当返回空数组后,上层函数 doAction 会觉得一定拿到一个值,并且其中最开始是没有处理空值的能力的,所以我们需要在 doAction 中每一处调用
getSomeRegisters或getStack的回调里,都加上空值检查。Beta Was this translation helpful? Give feedback.
All reactions