首页
学习
活动
专区
工具
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环境,其他环境也很简单,如果有需要可以再下方留言。

40820

汇编寄存器的规则

另外,较旧的 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.6K50
  • 2019年3月21日 Go生态洞察:在Go 1.12中调试你部署的代码

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

    10610

    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

    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.2K10

    使用 LLDB 调试 Go 程序

    但是在IDE中集成比较粗糙,调试也很慢,所以基本不使用debugger进行调试, 最近看到滴滴的工程师分享的使用debugger在调试Go程序,我觉得有必要在尝试一下这方面的技术了。...LLDB调试器( > 3.7)可以使用这个信息调试进程或者core dump文件。 使用-w可以告诉链接器忽略这个调试信息, 比如go build -ldflags "-w" prog.go。...1、安装lldb MacOS下如果你安装了XCode,应该已经安装了LLDB, LLDB是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的时候,曾通过Docker在Ubuntu上安装过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.8K51

    汇编和栈

    当使用调试信息编译程序时,调试信息将引用基本指针寄存器中的偏移量以获得变量。 这些偏移量被赋予名称,与您在源代码中为变量赋予的名称相同。...使用 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.7K20

    rust-vim 整合基于vimspector的debug调试环境

    不清楚的可以回看我的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

    55220

    如何在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 Crash

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

    18.2K153

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

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

    2.9K70

    如何调试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_t的8位,正好40位。...//数组越界了 找到了对象方法,属性的get,set方法,唯独没有知道类方法。...struct big { SEL name; const char *types; MethodListIMP imp; }; 所以在lldb调试的时候

    30310

    envoy vscode调试环境搭建

    尝试了以下各种手段,包括 Jetbrains clion 调试 vscode Mac 本机 gdb(lldb) 调试 vscode docker container 容器调试 最终,只有最后一个方法成功...之前在使用 jetbrain 全家桶体验都不错,包括 java的 idea,go的goland,python的pycharm,因此搜了一下 c++ 有对应的 clion 这个 ide。...网上有网友生成的 cmake 工程文件 CMakeLists.txt,参考, 效果也不如意 vscode Mac 本机调试 编译没问题,但是 **打的断点无效,无法进入断点** # 安装依赖的工具 brew...找不到符号表,显示的是汇编指令而不是代码 # 实际上添加了这个参数也没用 bazel build -c dbg --spawn\_strategy=local //source/exe:envoy-static...镜像打包成功会启动容器,并通过vscode进入容器内部 注意:需要把docker占用虚拟机的资源调大,否则编译资源不足会报错 在vscode 打开命令行执行以下命令(这时是在容器内部) 生成配置文件:tools

    2.7K20
    领券