是否可以使用 lldb 在 nasm 文件中使用标签作为断点?
Is it possible to use a label as a breakpoint in a nasm file using lldb?
我正在努力对使用 os x 64 位在 nasm 中编写的代码进行不断的更改。我发现每次都必须重新定义断点所在的行(因为更改代码,行也会更改),这很无聊。所以我想到了使用一个引用标签的断点(顺便说一句,我可以使用 gdb 来做)。但是,我注意到在使用 nasm 代码进行调试时,lldb 不允许在断点中使用标签。你们有人用吗?如果可以,怎么做?
如果标签作为真正的符号存在,lldb 应该能够在该符号上设置断点。但是如果标签不存在(它是一个本地符号或其他),lldb 将不得不从调试信息中挖掘出来。我不知道 nasm 如何表示调试信息中的标签,但如果 gdb 可以找到它们,那么 lldb 应该也可以使用一些面包屑。如果您在 http://bugs.llvm.org 处提交了示例的错误,该错误显示了问题,那么那里的人可以看看。
您可以使用“源正则表达式”断点(在 lldb break set -p
中)对当前 lldb 执行此任务。由于标签排在第一位,像 ^ *LABELNAME:
这样的正则表达式应该只获取标签的定义,而不是源代码中对它的任何其他引用。
更一般地说,当我有代码时,我知道我要放置一个断点,但我仍在忙于编辑代码,所以行号一直在变化,我只是添加一个注释喜欢:
someInterestingFunctionCall() // Set a breakpoint here
然后我做:
(lldb) break set -p "在这里设置断点" -f MySourceFile.c
这样我就可以根据需要编辑源代码并四处移动此行,并且断点将继续起作用。 nasm 支持注释,因此您也可以只使用注释来标记要中断的行。
我正在努力对使用 os x 64 位在 nasm 中编写的代码进行不断的更改。我发现每次都必须重新定义断点所在的行(因为更改代码,行也会更改),这很无聊。所以我想到了使用一个引用标签的断点(顺便说一句,我可以使用 gdb 来做)。但是,我注意到在使用 nasm 代码进行调试时,lldb 不允许在断点中使用标签。你们有人用吗?如果可以,怎么做?
如果标签作为真正的符号存在,lldb 应该能够在该符号上设置断点。但是如果标签不存在(它是一个本地符号或其他),lldb 将不得不从调试信息中挖掘出来。我不知道 nasm 如何表示调试信息中的标签,但如果 gdb 可以找到它们,那么 lldb 应该也可以使用一些面包屑。如果您在 http://bugs.llvm.org 处提交了示例的错误,该错误显示了问题,那么那里的人可以看看。
您可以使用“源正则表达式”断点(在 lldb break set -p
中)对当前 lldb 执行此任务。由于标签排在第一位,像 ^ *LABELNAME:
这样的正则表达式应该只获取标签的定义,而不是源代码中对它的任何其他引用。
更一般地说,当我有代码时,我知道我要放置一个断点,但我仍在忙于编辑代码,所以行号一直在变化,我只是添加一个注释喜欢:
someInterestingFunctionCall() // Set a breakpoint here
然后我做:
(lldb) break set -p "在这里设置断点" -f MySourceFile.c
这样我就可以根据需要编辑源代码并四处移动此行,并且断点将继续起作用。 nasm 支持注释,因此您也可以只使用注释来标记要中断的行。