我想知道当我的应用程序二进制文件加载时但在运行任何代码之前发生了什么。
按照 stackoverflow 的答案here,我尝试这样做:
(lldb) process launch --stop-at-entry -- <Process arguments>
通过在 XCode 中配置构建 n 运行设置 我通过将
--stop-at-entry
添加到运行调试设置的参数中来实现此目的,如下所示
但它只是不停地跑。
我做错了什么?如何在应用程序开始处放置断点?
Xcode 自行管理进程启动,因此在 Xcode 控制台中运行
process launch
并不起作用,因为没有人为新进程获取事件。
“启动时传递的参数”在启动时传递给您正在调试的程序,因此它们并不意味着不改变 lldb 的行为,除了将它们传递给调试者 lldb 看起来并没有真正对它们起作用。
您可以使用 lldb 的
settings
来修改 lldb 的幕后行为。没有“在入口点停止”的设置,但有一个“在每个共享库加载时停止”的设置。所以说:
settings set target.process.stop-on-sharedlibrary-events true
在您的
~/.lldbinit
中,然后启动,您将在加载主二进制文件后停止,并且(如果您不更改设置)在每次后续加载后停止。
起点实际上是一个相当不友好的停止点,实际上还没有初始化任何东西,如果你过多地探索,你可能会弄乱你正在尝试运行的程序的环境状态。在第一个库加载完成后停止会让您处于一个更加清醒的位置。
但是,如果您确实想在程序启动的早期阶段查看代码,则必须使用命令行 lldb。