Xcode / lldb:在进入程序时停止没有符号的应用程序

时间:2014-01-15 11:50:31

标签: xcode lldb

在lldb命令行中,我可以通过编写以下命令来停止执行带有--stop-at-entry选项的程序(没有调试符号):

(lldb) target create /bin/ls
Current executable set to '/bin/ls' (x86_64).
(lldb) process launch --stop-at-entry
Process 22250 launched: '/bin/ls' (x86_64)
Process 22250 stopped
* thread #1: tid = 0xc46fa, 0x00007fff5fc01028 dyld`_dyld_start, stop reason = signal SIGSTOP
frame #0: 0x00007fff5fc01028 dyld`_dyld_start
dyld`_dyld_start:
-> 0x7fff5fc01028:  popq   %rdi
...
但是,我希望在lldb的Xcode(5)IDE中工作。那可能是同样的事吗?我可以通过Menu Debug-> Attach to Process->成功连接到一个流程。按进程标识符或名称。如果您在那里输入应用程序名称,lldb将在启动后立即接管该过程。但是,我认为在程序启动时无法停止执行,即相当于--start-at-entry。我也没有看到在IDE中的lldb窗口中输入相应命令的方法,因为应用程序尚未启动。

这可以在IDE中使用吗?

4 个答案:

答案 0 :(得分:3)

不确定您要执行的操作,但lldb确实有一个停止共享库加载的设置:

(lldb) settings set target.process.stop-on-sharedlibrary-events 1

这会导致程序lldb正在调试,以便在加载新的共享库时停止。在第一次共享库加载之前的过程中没有太多进展,所以这很早就会发现它。

答案 1 :(得分:1)

您可以将lldb Xcode特定的设置命令放在〜/ .lldbinit-Xcode 文件中,它们只适用于从Xcode调用的lldb实例。

这有助于保持单独的设置。

来自lldb(1)

  

文件

     

lldb将从三个文件中读取设置/别名/命令   启动,如果他们存在。

     

首先,它将读取〜/ .lldbinit-debugger命令文件。如果你是   使用lldb命令行界面,这是〜/ .lldbinit -lldb。如果   你正在使用像Xcode这样的GUI调试器中的lldb   〜/ .lldbinit-Xcode中。

答案 2 :(得分:0)

完全可行,至少在Xcode 7下。

在现有的Xcode项目中,创建一个新架构。在架构设置中的“运行”下,指定“其他可执行文件”并选择所需的那个。在架构属性中,您还可以指定命令行,工作目录,自定义环境等...

答案 3 :(得分:0)

target.process.stop-on-sharedlibrary-eventssettings show target.process.stop-on-exec 都没有达到我想要的效果。

从堆栈的最底部开始,我看到了 _dyld_startdyldbootstrap::startdyld::_main

dyld::_main 创建符号断点,将模块指定为 dyld,这对我在启动过程的早期获得调试器很有帮助。

尝试在前两个函数上设置断点对我不起作用。我相信这可能与第二个函数中的 dyld rebasing itself 有关系:代码没有运行在调试器期望它在内存中的位置,直到第三帧。