首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

assembly - lldb无法在macOS上找到正确的调试信息

在macOS上,当使用lldb进行调试时,可能会遇到无法找到正确的调试信息的问题。这通常是由于缺少或错误的符号表文件导致的。

首先,让我们了解一下assembly的概念。Assembly是一种低级的计算机语言,它使用符号和指令来表示机器代码。它是一种与特定硬件架构密切相关的语言,用于编写底层程序和驱动程序。

在调试过程中,lldb需要符号表文件来将机器代码映射到源代码的行号和变量名。符号表文件包含了函数、变量和其他符号的地址和名称的映射关系。当lldb无法找到正确的调试信息时,它将无法准确地显示源代码和变量的值,从而影响调试过程。

解决这个问题的一种方法是确保编译时生成了正确的调试信息。在使用编译器编译代码时,可以使用调试选项来生成符号表文件。例如,在使用GCC编译C代码时,可以使用"-g"选项来生成调试信息。在使用Clang编译C++代码时,可以使用"-g"选项。

另一种方法是使用调试器的命令来加载符号表文件。在lldb中,可以使用"target symbols add"命令来加载符号表文件。例如,假设符号表文件名为"myapp.debug",可以使用以下命令加载符号表文件:

代码语言:txt
复制
(lldb) target symbols add myapp.debug

此外,还可以通过设置环境变量来指定符号表文件的搜索路径。在lldb中,可以使用"settings set target.source-map"命令来设置源代码和符号表文件的映射关系。例如,假设源代码位于"/path/to/source"目录下,符号表文件位于"/path/to/symbols"目录下,可以使用以下命令设置映射关系:

代码语言:txt
复制
(lldb) settings set target.source-map /path/to/source /path/to/symbols

这样,lldb将在调试过程中自动查找并加载符号表文件。

总结一下,当lldb无法在macOS上找到正确的调试信息时,可以通过以下方法解决问题:

  1. 确保编译时生成了正确的调试信息。
  2. 使用调试器的命令加载符号表文件。
  3. 设置环境变量来指定符号表文件的搜索路径。

腾讯云提供了一系列云计算产品,包括云服务器、云数据库、云存储等,可以满足各种云计算需求。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

OC底层探索09-cache_t实现原理探索OC底层探索09-cache_t实现原理探索

OC底层探索06-isa本身藏了多少信息你知道吗?分析了isa。...使用lldb调试cache 使用lldb调试前提是你需要有lib-objc源码环境 准备工作 @interface HRTest : NSObject @property(nonatomic...(HRTest`-[HRTest say1]) 通过lldb调试,cache_t结构很清楚了,但是调试过程中使用buckets(),sel(),imp(HRTest.class)是哪里呢...方法系统中是进行过处理无法直接访问变量指针地址获取值。...这一点cache探索中非常重要. 脱离源码来调试cache(模拟器) 代码基础都是依赖源码来进行修改,可以直接使用,只模拟了模拟器、macos环境,其他环境也很简单,如果有需要可以再下方留言。

40320

汇编寄存器规则

另外,较旧 Mac 使用 32 位架构,但是 Apple 2010 年底停止生产 32 位 Mac。 macOS 下运行程序可能是 64 位兼容,包括 Simulator 程序。...这是与之前显示方法相同屏幕截图,除了这次是 iPhone 7 ARM64 程序集中: 您现在可能无法区分这两种架构,但是您很快就会知道它们就像手背一样....Apple Watch 前两代是 32 位设备,但是第三代是 64 位设备。 此外,较新 macOS 设备发现 Apple Touch Bar(无疑是花哨)也使用 32 位架构。...触发断点后 LLDB 控制台中键入以下内容: (lldb) register read 这将列出处于暂停执行状态所有主要寄存器。 但是输出了太多信息。...lldb -n SpringBoard 这样会将 LLDB 绑定到正在模拟器运行 SpringBoard 实例!SpringBoard 就是 iOS 控制主屏幕程序。

2.5K50
  • 2019年3月21日 Go生态洞察:Go 1.12中调试你部署代码

    Go 1.11和1.12记录语句边界信息,并在优化和内联中更好地跟踪源代码行号。因此,Go 1.12中,逐步执行此代码会按照你所期望顺序每一行停止。...我们专注于为调试器生成关于变量位置正确信息,所以如果变量可以被打印出来,它就会被正确打印。...关于macOS支持说明 Go 1.11开始压缩调试信息以减小二进制文件大小。这被Delve原生支持,但LLDB和GDBmacOS不支持压缩调试信息。...关键点 说明 使用Delve调试 调试优化代码,支持检查变量 改进值检查 更准确地检查优化后变量值 改进单步执行 更顺畅调试体验,更准确断点 函数调用支持 支持Delve中调用函数 macOS...支持 处理压缩调试信息方法

    10310

    Voltron:一款功能强大可扩展调试器UI工具包

    关于Voltron Voltron是一款功能强大可扩展调试器UI工具包,该工具基于Python开发,旨在通过引入程序视图来提升和改善各种调试器(LLDB、GDB、VDB和WinDbg)用户体验。...工具内置视图可用于: 注册表 反汇编 堆栈 内存 断点 回溯 工具支持 Voltron支持LLDB、GDB、VDB和WinDbg/CBD,可以macOS、Linux和Windows平台上运行。...工具安装 当前版本Voltron仅支持macOS和Debian操作系统汇总使用安装脚本进行安装,我们需要使用下列命令将该项目源码克隆至本地,并完成工具安装: $ git clone https.../install.sh -v /path/to/venv -b lldb 工具使用 如果你调试器提供了初始化脚本,可以直接配置其启动时(entry.py入口点脚本)加载Voltron。...比如说macOS,脚本路径为“/Library/Python/2.7/site-packages/voltron/entry.py”,install.sh脚本会将其添加进GDB和LLDB相关路径中

    1.1K10

    SOS 安装程序 (dotnet-sos)

    借助此扩展,你可以从本机调试器(如 lldb 和 windbg)检查托管 .NET Core 状态。 备注 只有 Linux 或 macOS 需要通过 dotnet-sos 工具安装 SOS。...选项 --version 显示版本信息。 -h|--help 显示命令行帮助。 安装 dotnet-sos 本地安装用于调试 .NET Core 进程 SOS 扩展。... macOS 和 Linux ,将更新 .lldbinit 文件,以便扩展 lldb 启动时自动加载。...如果要使用较旧调试工具(低于版本 10.0.18317.1001) Windows 安装 SOS,则需要通过调试程序中运行 .load %USERPROFILE%\.dotnet\sos\sos.dll...可以使用以下体系结构: Arm Arm64 X86 X64 卸载 dotnet-sos 卸载 SOS 扩展名,并在 Linux 和 macOS 上将其从 lldb 配置中删除。

    1K00

    使用 LLDB 调试 Go 程序

    但是IDE中集成比较粗糙,调试也很慢,所以基本不使用debugger进行调试, 最近看到滴滴工程师分享使用debugger调试Go程序,我觉得有必要在尝试一下这方面的技术了。...LLDB调试器( > 3.7)可以使用这个信息调试进程或者core dump文件。 使用-w可以告诉链接器忽略这个调试信息, 比如go build -ldflags "-w" prog.go。...1、安装lldb MacOS下如果你安装了XCode,应该已经安装了LLDBLLDB是XCode默认调试器。...请确保开启参数 -gcflags "-N -l" -不能改变变量值,或者调用goh函数 -需要更好支持 chan 和 map 类型 -调试信息不包含输入package, 所以你表达式中需要package...(*foo/bar.BarType) 或者 (*“v.io/x/foo”.FooType)(x) -调试信息不包含作用域,所以变量它们初始化之前是可见

    2.1K30

    Linux下搭建Swift开发调试环境

    Linux下搭建Swift开发调试环境 文本介绍如何在Linux下配置一个Swift开发环境(可用于生产),文中所记录各个配置环节不仅适用于Linux,也同样适用于macOS下配置Visual...之前使用Vapor时候,曾通过DockerUbuntu安装过Swift,不过代码是mac上调试。我也十分好奇,2021年Swift到底Linux下开发环境如何?...本文目标是Linux搭建一个可供生产标准Swift开发调试环境。使用者将获得一个支持代码高亮、自动补全、定义跳转、断点调试、代码美化、代码静态扫描、跨操作系统平台配置综合开发体验。...,swift调试需设置成lldb request 此启动配置请求类型,swift调试需设置成launch, name 调试启动配置下拉列表中显示名称 program可执行文件位置。...需要注意是,vscode目前无法正确响应swiftformat自定义配置中--indent,需要在vscode中对indent做单独设定(我目前采用是通过EditorConfig for VS

    10.1K20

    用Android Studio调试Framework层代码

    调试原理 LLDB作为Android Native层调试工具,其原理跟gdb一样,也是采用C/S架构,通过push一个lldb-server到设备,pc机debugger作为lldb-client...C++在编译时有一个选项-g表示编译出来可执行文件是带有调试信息,比如源文件、行号信息,都会存放在ELF文件中 .debug_*段之中, 知道了这些调试信息后,调试器配合IDE就可以定位代码了...符号表添加也可以通过lldb命令行方式添加 ? ? LLDB需要这些符号信息才能帮你定位到调试断点代码。...配置源码到AS 当LLDB告诉AS源文件行号信息时,AS需要定位到对应代码处,所以必须先把源文件导入到AS中,最简单做法是建立软链接。...Android Framework 如何调试Android Native Framework macOS 10.12 编译 Android 5.1

    4.7K51

    汇编和栈

    当使用调试信息编译程序时,调试信息将引用基本指针寄存器中偏移量以获得变量。 这些偏移量被赋予名称,与您在源代码中为变量赋予名称相同。...使用 dumpreg 以及以下 LLDB 命令验证两者值相同: (lldb) p (BOOL)(rbp == rsp) 请务必表达式两边加上括号,否则 LLDB 无法正确解析它。...这个相当模糊代码实际意味着基本指针减去 40,即 RBP-32。或者以十六进制表示,RBP-0x20。 这是重要信息。 它告诉调试器,始终可以在此内存地址中找到名为 one 变量。...应该是第 16 行: mov qword ptr [rbp - 0x20], rdi 一旦 executeLotsOfArguments 汇编输出中找到它,就在该程序行创建一个断点。...现在, LLDB 中执行汇编指令步骤: (lldb) si (lldb) po one 噢!... 是的! 工作正常! 所引用值 1 正确持有值 0x1。 您可能想知道如果改变一个会发生什么。

    3.5K20

    rust-vim 整合基于vimspectordebug调试环境

    不清楚可以回看我rust-vim安装记录 调试器,找了几款,最后还是觉得还是使用vimspector这个用习惯,捣鼓两个整合了一下基于vimspector调试环境,快捷键不用重新再配置。.../gadgets/macos/.gadgets.d/lldb-vscode.json 这里说明一个,这个路径是.vim,我用是nvim没错,只是我把插件路径都统一到了.vim这个目录下了。..." } } } 2.添加 .vimspector 文件 这个文件添加到子项目下,比如下面是我项目结构, 添加到 vector_test 这个项目下,偿试rust-learning添加,...子项无法启动vimspector。...对应HUMAN模式快捷键: 按键 映射 功能 F5 VimspectorContinue 开始调试、下一个断点 F3 VimspectorStop 停止调试 F4 <Plug

    52420

    Android基础开发实践:如何分析Native Crash

    其中如果出现libart.so(比如上图),不要简单认为Runtime出现异常,实际是因为Java代码执行过程中,需要Runtime参与方法查找、方法Invoke等操作,所以栈中存在art信息也是正常...符号偏移量(以字节为单位):12 由于app中so是通过jni代码编译而来,编译出so如果有对应调试信息,就可以通过这些调试信息找到符号对应代码行,这些调试信息就是符号表,包括symtab以及...Android使用gdb编译不是一件轻松事情,但是也并不复杂。Android SDK中实际已经包含了一套gdb调试工具,我们直接拿来使用即可。...不过还是不建议日常调试过程中启用这类插件,避免丢掉有效信息。...总结 AndroidNative Crash总的来说还是有章可循,通过分析有效日志和调用栈以及使用正确工具进行调试,也可以达到和Java Crash差不多分析效率。

    17.9K153

    偏执iOS逆向研究员:收集全版本macOS iOS+越狱+内核调试

    使用KDK对macOS Sierra 10.12进行内核调试 就拿上文刚刚安装这个虚拟机来进行内核调试吧! 关机后“设置”→“网络”里,将“连接方式”改成“桥接网卡”,后续追踪IP时比较容易定位。...顺带lldb即可。...只有被调试机器需要安装KDK包,本节中也就是虚拟机需要安装,调试机不需要安装KDK包,调试机中只要有一章安装好Xcode自带lldb即可。...不过并不影响调试,每次开机按F12,进恢复模式,然后重复以下三个步骤就可以了。 ? 重启后就又进去“崭新”调试模式了。 我们调试机器,使用lldb连上去: ? 连接成功。...比如下图3.1.2c这个lockdown问题,笔者就是通过重新拔插手机,在手机上重新点击“信任电脑”,电脑重新点击“允许访问手机信息”来解决。 ?

    2.8K70

    如何在Electra越狱设备使用LLDB调试应用程序

    3月18日时候,我就曾发表过一篇关于Electra越狱设备使用LLDB调试应用程序文章。本文我将在此基础,做进一步更新优化。...我试图google搜索,有关使用Electra越狱iOS设备上调试AppStore应用程序简要说明。但令我失望是,竟然没有找到任何有用资料。...接着Xcode中你应该看到,如下红框内所示信息: ? 等到“准备调试支持iPhone”完成。然后设备检查 /Developer/usr/bin/debugserver。...将LLDB attach到已经运行进程 在你Mac控制台上,连接iPhone: ? iPhone控制台中运行 ? 找到你想要attach进程pid。然后运行 ?...现在,Mac打开另一个控制台,然后运行 ? LLDB控制台中运行 ? LLDB下运行应用程序 在你Mac控制台上,连接iPhone: ? iPhone控制台中运行 ?

    2.3K40

    如何调试Android Native Framework

    调试调试一个可执行文件时候,必须知道一些调试信息才能进行调试,这个调试信息可多可少(也可以没有)。... heap.cc 这个文件第2124行。不过如果这时候断点命中,依然无法关联到源码。...那么问题来了,我们绝大多数情况下是使用另外一台机器源码进行调试——比如我提供那个 Demo工程 包含带符号libart.so里面保存源文件信息目录实际是我编译电脑目录,而你调试时候需要使用自己电脑目录...lldb-sever这个文件可以 `$ANDROID_SDK/lldb//android/ 目录下找到,确认你被调试设备CPU构架之后选择你需要那个文件,比如大多数是arm构架,那么执行...ARM下,r0~r4存放函数参数,超过四个参数放在栈,具体如何利用这些寄存器信息需要了解一些ARM汇编知识。

    3.7K20

    OC底层探索08-基于objc4-781类结构分析OC底层探索08-基于objc4-781类结构分析

    OC底层探索06-isa本身藏了多少信息你知道吗?分析了isa。 平时开发中应该都接触或者使用过缓存技术,目的就是提高执行效率,用空间换取时间。...中我们无法直接访问objc_class中信息,只能通过指针访问方式来进行验证,所以这里需要用到内存偏移 int c[4] = {1, 2, 3, 4}; int *d = c; NSLog(@"%p...类内部信息 手动计算objc_class源码中class_data_bits_t bits;偏移量:32位,(加上结构体:class_data_bits_t8位,正好40位。...//数组越界了 找到了对象方法,属性get,set方法,唯独没有知道类方法。...struct big { SEL name; const char *types; MethodListIMP imp; }; 所以lldb调试时候

    30110
    领券