在Xcode4中,"Load symbols lazily"调试选项可以在以下位置找到:
"Load symbols lazily"调试选项用于控制Xcode在调试过程中是否延迟加载符号信息。当这个选项被勾选时,Xcode将只在需要时加载符号信息,这可以加快调试过程中的启动速度。然而,这也可能导致在调试过程中无法查看某些符号的详细信息。
注意:以上答案是基于Xcode4的版本,如果你使用的是其他版本的Xcode,可能会有所不同。
比如在解决方案里有两个项目,一个控制台程序,它被优化过且是设置为启动,另一个是类库,没有被优化,但它是你的代码,控制台程序会调用类库中的方法,如果在类库里设置断点,在进行调试的时候会有如下警告消息:...IE中禁用了脚本调试,在vs调试的时候会出现如下警告对话框 如果你想隐藏这个对话框,操作如下 工具+选项+调试+常规,不选中“如果启动时禁用了脚本调试,发出警告”项。...#299、从模块窗口加载符号 原文链接:How to load symbols from the Modules window 操作步骤: 在调试状态,右键单击模块窗口,选择“加载符号” 出现一个查找对胡框...评论:符号文件对调试程序是很重要,你现在知道在哪里可以加载它了吧。...#300、如何延迟加载符号 原文链接:How to delay loading symbols 操作步骤: 如果要延迟加载符号,操作如下: 菜单:工具+选项+调试+常规,选中“关闭此对话框后使用更新设置的加载
This exception may be expected and handled. *** ERROR: Module load completed but symbols could not be..._RtlUserThreadStart+0x1b (FPO: [Non-Fpo]) 通过函数调用栈,可以清楚的看出异常发生在main函数中,在test.cpp第11行处调用了printf。...,当然如果你想让Release的程序不进行优化,可以在Visual Studio中关闭这个选项,如下图: ?...,在调试前打开源码文件,可以直接在里面设置断点,调试的快捷键和Visual Studio一样! Windbg工作空间 Windbg的工作空间主要表示调试会话的状态、调试器的设置以及窗口布局的设置等。...顺便在这里提一个很实用的命令.hh,用来在Windbg中打开帮助文档,比如使用.hh k则帮助文档会打开到索引k命令处。
可执行文件的符号表(symbol table)记录了某个可执行文件中的函数名、全局变量、宏定义等符号信息,这些信息对于我们调试十分重要。...nm命令属于GNU binutils的功能,能够输出可执行文件的符号表。它的用法是这样的: 用法:nm [选项] [文件] 列举 [文件] 中的符号 (默认为 a.out)。...该任选项仅对于动态目标(例如特定类型的共享库)有意义 -f, --format=FORMAT FORMAT 可取值 bsd、sysv 或 posix,该选项在 GNU nm 中有用,默认为 bsd -...对于不记录符号大小的目标文件格式,此选项不起作用,除非使用了--size sort,在这种情况下,将显示计算的大小 -s, --print-armap 当列出库中成员的符号时,同时列出索引。...只有在启用插件支持的情况下构建了工具链时,此选项才可用 --size-sort 按符号大小排列 --special-syms 显示目标相关的具体特殊含义的符号。
... ... .debug:一个调试符号表,其条目是程序中定义的局部变量和类型定义,程序中定义和引用的全局变量,以及原始的C源文件。只有以-g选项调用编译驱动程序时才会得到这张表。...Xcode的build setting中,有不少与symbols有关,现在我来依次试验这几个设置选项,了解一下它们的具体作用。...在Xcode中查看构建过程,可以发现,当Generate Debug Symbols选项设置为YES时,每个源文件在编译成.o文件时,编译参数多了-g和-gmodules两项。...当Generate Debug Symbols设置为NO的时候,在Xcode中设置的断点不会中断。...中的调试符号会被剥离掉。
参数:buffer:它是一个指针数组,函数获取的当前线程的调用堆栈将会被存放在buffer中。在buffer中的指针实际是从堆栈中获取的返回地址,每一个堆栈 框架有一个返回地址。...该选项让链接器将所有符号添加到动态符号表中,这样才能将函数地址翻译成函数名,否则打印的结果是不会打印函数名的。 另外,这个选项不会处理static函数,所以,static函数的符号无法得到。 3....补充 address2line 同一个函数可以在代码中多个地方调用,如果我们只是知道函数,要想知道在哪里调用了该函数,可以通过address2line命令来完成,我们用第2步中编译出来的test2来做实验...address2line 三、内核代码中如何打印函数栈? 在Linux内核中提供了一个可以打印出内核调用堆栈的函数 dump_stack()。...该函数在我们调试内核的过程中可以打印出函数调用关系,该函数可以帮助我们进行内核调试,以及让我们了解内核的调用关系。 1.
#301、缓存符号到本地磁盘 原文链接:You can cache symbols locally to disk 操作步骤: 菜单:工具+选项+调试+符号 在任何时候使用符号服务器,意味着不是我的机器载入符号...我可以做两件事: 1、关闭对话框时候,取消选中加载符号- 宁愿等到需要的的时候加载符号。 2、指定复制符号文件在磁盘中的缓存位置。 评论:在vs2008 sp1里已经有所改变了。...#302、在需要的时候加载指定的符号 原文链接:How to load only specified symbols when you want to 操作步骤: 菜单:工具+选项+调试+符号 ,选中...“只有在手动加载符号才搜索上述位置” 如果启用这个选项,加载符号对话框关闭时,选项是禁用的,因为它没法操作。...other variables in the QuickWatch window 操作步骤: 你在快速监视窗口中执行命令或输入表达式都会保存到“表达式”下拉框中 评论:这个功能的好处在于很方便调用过去使用使用过的表达式
关闭地址随机化 kernel features ----> [] Randomize the address of the kernel image (KASLR) 建议关闭地址随机化,否则会出现gdb中无法在断点处停下来的情况...可以参考:https://blog.csdn.net/gatieme/article/details/104266966 在目标板上开启gdbserver模式(虚拟soc中加上gdb调试的选项);在host...使用gdb扩展 内核通过python脚本定义了一组gdb命令,可方便其对内核的调试,如通过该脚本可以打印dmesg,percpu变量,通过pid打印其对应的task_struct结构体等。...在gdb中可以读取该文件。 # 启动gdb,工具链中gdb的路径,并读取符号表 # vmlinux相当于elf文件,具有符号表。Image文件相当于bin文件。...-- (Re-)load symbols of Linux kernel and currently loaded modules. lx-timerlist -- Print /proc/timer_list
在unix系统中,通过gnu开源gcc或者g++工具生成的目标文件(object file),可以用nm、objdump和readelf这三个命令来查看。...之前在调试makefile文件的时候,链接动态库出错:libsrcpbl.so: undefined reference to 'gcProgramName'。...同时,对里面涉及的一些opinion选项和nm命令显示的符号做了DESCRIPTION说明,供以后参考。 ###### CentOS7.1上查看nm命令的man手册,部分选项仍未能理解。...【对每个符号,使用调试信息(对象文件编译时增加-g选项)以便找到文件名和行号。对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符号重定位入口的行号。...【仅显示每个目标文件中已定义的符号】 --plugin name Load the plugin called name to add support for extra
安装好后,在开始-》Windows Kits文件夹下有 WinDbg(x86),WinDbg(x64) 两个程序的快捷方式,如果你要调试 64位的程序,就用WinDbg(x64)。...dump的工具-ProcDump 在命令行,运行这个程序: procdump -ma mydotNetApp.exe d:\myapp.dmp 运行后,将得到一个myapp.dmp 文件,如果这个文件是在本机生成的...,那么VS2013可以直接打开这个文件并可以分析托管内存,但是,往往内存转储文件是 在服务器生成的,而服务器又很可能跟开发环境不一样,所以才需要本文介绍的 WinDbg来调试。...然后,配置下使用此文件的调试环境。 在菜单命令 File->Symbol path......tp 这里load命令必须带SOS.dll的路径。加载了它,然后执行 .loadby sos clr ,表示调试.NET托管程序。
Local Symbols Local Symbols记录了用static声明的全局变量地址和大小,C文件中函数的地址和用static声明的函数代码大小,汇编文件中的标号地址(作用域限本文件),下面是部分截图...: Global Symbols Global Symbols记录了全局变量的地址和大小,C文件中函数的地址及其代码大小,汇编文件中的标号地址(作用域全工程),下面是部分截图: 10.2.6 Memory...Map of the image 映像文件可以分为加载域(Load Region)和运行域(Execution Region):加载域反映了ARM可执行映像文件的各个段存放在存储器中的位置关系。...运行域反映了ARM可执行映像文件各个段真正执行时在存储器中的位置关系: 简单的说,加载域就是程序在Flash中的实际存储,而运行域是芯片上电后的运行状态,通过下面的框图可以有一个感性的认识: 通过上面的框图可以看出...ROM Totals:显示包含映像所需的 ROM的最小大小。这不包括 ZI数据和存储在ROM 中的调试信息。 10.3 HTM文件分析 MDK将工程全编译,且没有错误后,就会生成此文件。
基于这个事实,我想到了这样一个办法,在程序开始时,通过系统提供的atexit(),向系统注册一个回调函数,在程序调用exit()退出的时候,这个回调函数就会被调用,然后我们在回调函数中打印出当前的函数调用栈...上述方法用来解决类似问题是非常行之有效的。 在上面,我提到了在“回调函数中打印出当前的函数调用栈”,相信细心的朋友应该注意到这个了,本文的主要内容就是详细介绍,如何在程序中打印中当前的函数调用栈。...不过不知道大家有没有想过这样一个问题,同一个函数可以在代码中多个地方调用,如果我们只是知道函数,而不知道在哪里调用的,有时候还是不够方便,bingo,这个也是有办法的,可以通过address2line命令来完成...,我们用第2步中编译出来的test2来做实验(address2line的-f选项可以打出函数名, -C选项也可以demangle): wuzesheng@ubuntu:~/work/test$addr2line-a0x4008a7...在这里需要说明一下的是,第3步比第2步多了一个-g选项,-g选项的主要作用是生成调试信息,位置信息就属于调试信息的范畴,经常用gdb的朋友相信不会对这个选项感到陌生。 以上转自罗索实验室
安卓上APK调试步骤: 1.Apk(debuggable)或系统(ro.debuggable=1)设置为可调试 2.在虚拟机中启动服务端(adbd/android_server) 3.在主机端连接客户端调试器...(IDA/jdb/adt),设置断点 安卓上linux程序调试步骤: 1.在虚拟机中启动服务端(gdb_server/linux_server) 2.在主机端连接客户端调试器(IDA/gdb_for_windows...是一个工具包,反编译dex和jar,还提供了一些其它的功能,每个功能使用一个bat批处理或 sh 脚本来包装,只需在Windows 系统中调用 bat文件、在Linux 系统中调用 sh 脚本即可。...中插入waitfordebugger或者Log.i的smali代码来进行相应的控制 第三步,回编译(-d选项)+签名 回编译:apktool b –d path –o input.apk 签名: java...dex 使用ida分析apk或者从apk中提取出的dex 设置调试选项,包括包名和主类名,参考反编译的AndroidManifest 启动调试即可 image [图片上传失败
(此处省略若干行) lx-symbols -- (Re-)load symbols of Linux kernel and currently loaded...task字段在thread_info结构体中偏移量为0,进而获得task。...andl $esp, %ecx movl (%ecx), p 指令运行后,p就获得当前CPU上运行进程的描述符指针。 然而在调试器中调了下,发现这种机制早已经被废弃掉了。...但是在执行source ./.gdbinit命令时,提示add-auto-load-safe-path这个命令找不到,于是干脆把 set auto-load safe-path / 这行代码添加到配置文件...-- (Re-)load symbols of Linux kernel and currently loaded modules 至此,终于可以安心调试内核了。
,它们会在编译的时候附带上对应模式相关的一些编译flags,来开启优化用于发布或者调试编译。...定制化的模式配置 当然,内置的这两规则默认设置的这些编译配置,只能满足大部分场景的常规需求,如果用户想要在不同的编译模式下定制化一些个人的编译配置,那么需要自己在xmake.lua做判断。...例如,我们想在release下也启用调试符号,那么只需要: if is_mode("release") then set_symbols("debug") end 或者额外增加一些编译flags...("xxx_$(mode)") 上面的配置,如果是调试模式编译就会选择链接:libxxx_debug.a库,而release下就会链接libxxx_release.a,当然,我们也可以设置到库搜索路径中...,并且这几种获取方式,在自定义脚本也是同样有效的哦,例如: target("test") set_kind("binary") add_files("src/*.c") on_load
今天又看到这个鸟错误,实在受不了鸟,于是直接操起windbg挂在exporer.exe进行调试。启动之后会发现调用堆栈基本没什么东西。...转到未处理的异常,然后中断调试,查看调用堆栈: 0:028> gn Mon Dec 17 15:56:44.025 2012 (UTC + 8:00): (a08.9d4): Break instruction...* ********************************************************************* *** ERROR: Module load...但是重启之后出现了另外一个问题,就是原来的百度云盘的那个图标没了,在系统的盘符浏览器那里看起来灰常的蛋疼,处理的方式也比较简单,删除注册表的如下项目即可: Windows Registry Editor...Symbol Type Viewer 1.0.0.6 Hooking library calls on Mac using DYLD_INSERT_LIBRARIES 注册表非常规启动项 Python加载的文件哪里去了
-g选项的作用是:在可执行文件中加入源码信息,比如:可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件都嵌入到可执行文件中,而是在调试时必须保证gdb能找到源文件。...模式,start命令就使程序准备运行程序中的第一条语句。...至于应该在哪里设置断点,怎么知道哪些代码可以跳过,而哪些代码要慢慢走,也要通过对错误现象的分析和假设来确定,以前我们用printf打印中间结果时,也要分析应该在哪里插入printf,打印哪些中间结果,调试的基本思路是一样的...[8] 段错误 如果程序运行时出现段错误,用gdb可以很容易定位到究竟是哪一行引发的段错误。在gdb中运行,遇到段错误会自动停下来,这时可以用命令查看当前执行到哪一行代码了。 ...,如果有函数则进入到函数中 break(b) 行号 在某一行设置断点 break 函数名 在某个函数开头设置断点 break(b)… if… 设置条件断点 continue(c) 从当前位置开始连续运行程序
上篇文章 编译一个默认输出hello world的linux内核 中,我们已经知道如何编译一个可以自运行的linux内核,这篇文章我们来看下如何对内核进行断点调试。 1....选中以下选项,对应选项的路径及意义如下图所示。 ? ? 4....保存上述配置后,按照上一篇文章中的方法,将我们写的hello world程序设置为内核默认使用的init程序。...至此,准备工作都已就绪,执行下面的命令,在qemu中运行内核,并使其处于等待调试状态。...$ gdb vmlinux 省略部分输出 Reading symbols from vmlinux... (gdb) 9. 在gdb环境下,执行下面的命令,连接qemu中启动的内核。
配置WinDbg,调试操作系统(双机调试) PS: 设置双机调试之前,请先安装虚拟机,并且安装好XP系统.这里不做演示.直接设置....一丶WinDbg的设置 1) 配置WinDbg的环境,在path变量里,在变量值后面增加: ;+Windgb的安装目录 ?...2) 在环境变量里新建一个变量名称为_NT_SYMBOL_PATH,变量值为SRV*e:\symbol*http://msdl.microsoft.com/download/symbols,其中e:\symbol...\pipe\com_1那你就悲剧了,搞半天你会发现不知道哪里出问题了 ?...4) 点击完成,再点击确定完成串行端口的添加 三丶虚拟机中的操作系统的设置 1) 启动VM的操作系统,打开C盘,设置文件下选项,设置为不隐藏系统文件,查看所有隐藏文件 ?
DPB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB文件是在Debug模式下才会生成。...PDB文件的调用过程 模块(Module),EXE和DLL都可以称之为模块,因为它们都有自已独立的Stack,所以我们在调试程序时,可以在Call Stack窗口查看到所有调用的Module Name。...实验过程中,用之前生成的PDB文件替换当前生成的PDB文件时,Debug窗口会显示No symbols loaded....PDB文件中记录了源文件路径的相关信息,所以在载入PDB文件的时候,就可以将相关调试信息与源码对应。这样可以可视化的实时查看调试时的函数调用、变量值等相关信息。模块当中记录的PDB文件是绝对路径。...然后调试进入dll模块时,右键在Call Stack对应的Module上选择查看Symbol Load Information.
的加载最好不要出现任务警告或错误,不然调试过程中遇到搞不清楚的问题。...这些symbols也是因为有了前面的debug编译选项才产生的。并且官方说不影响性能。 下面就可以调试了。 示例 DEMO给人直观的感觉。...在上面的demo中,我用了-tui参数,在调试时,把代码窗口也显示出来,这样就知道当前执行到了哪行代码。 如果你在使用时没有显示出源码,则需要用directory命令把源码加载进来。...至少有了一个感觉就是我们在调试时对程序是想干吗干吗。 我看到有挺多的GDB的指令集的教程,有兴趣的可以一一试下指令。...本来我也是整理了指令集的,但是感觉和其他人整理的也没有什么区别,所以就不想发出来了。 后面有的GDB调试的具体场景,再看GDB在具体场景中的使用。
领取专属 10元无门槛券
手把手带您无忧上云