我正在调试一些锈蚀代码,它通过抛出的位置,如:

我想这是铁锈库的一些汇编代码。有什么办法可以避免在这里停下来吗?然后直接扔出可读的代码?我已经取消了选项
Disassembly View: Show Source Code
Show Source Code in Disassembly View.我的launch.json是非常默认的:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "launch",
"cargo": {
"args": [
"build",
"--bin=myproject",
"--package=myproject"
],
"filter": {
"name": "myproject",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}",
"env": {}
}
]
}发布于 2022-05-19 17:46:27
我注意到,您发布的图片在局部变量窗口中显示了self和cx的本地变量。如果局部变量窗口是当前框架(显示程序集而不是源代码)的窗口,那么必须为该框架(*)提供调试信息。
如果这一切都是真的,那么更有可能的是,您只是没有这个函数的源文件的本地副本。也许您下载了一个生锈标准库的调试版本,这就是为什么它有调试信息的原因?通过运行命令,您可以确定地知道:
(lldb) image lookup -va $pc在这里停下来的时候。如果有CompileUnit和Function等条目,那么您确实有此框架的调试信息。
lldb对“不停止在没有调试信息的代码中”的所有测试都是关于调试信息的存在,而不是我们是否能够找到相关的源。因此,如果您有一个函数的调试信息,并且您的程序在逐步执行过程中进入该函数,则lldb将停止。
通过将库名称添加到lldb设置target.process.thread.step-avoid-libraries中,可以根据库基础修改库上的此行为。这是一个冒号分隔的库名或路径列表。如果step (而不是step-instruction)操作在列表中的库中结束,那么lldb将再次退出,而不管它是否有调试信息--这就是我认为您想要的行为。
或者,如果您想进入这个函数,只要您能够看到源代码,您肯定可以下载与您安装的锈菌库相匹配的源代码。您可能还必须使用target.source-map设置来告诉lldb源在您的本地系统中的位置。
(*)注意,如果为非调试函数注册了“框架识别器”,则局部变量可以显示在该函数中。11db没有铁锈的内置识别器,所以你必须手工添加它,这就不太可能了。听起来你不是在为这个功能做特别的事情。
发布于 2022-09-16 21:09:57
如果您使用扩展CodeLLDB,您可以通过进入文件-> Preferences -> Settings (Ctrl+Comma)并在-> CodeLLDB下选择Lldb: disable反汇编下的“从不”选项来禁用此代码中断。
对我来说,这阻止了调试会话进入程序集代码。例如,如果我的assert!()出现错误,会话将退出,而不是先在程序集代码中停止,然后退出。
https://stackoverflow.com/questions/72302325
复制相似问题