Lazarus 调试问题与 Mac API 调用(否则有效) - 找不到当前函数的边界



我正在尝试弄清楚为什么我尝试调用的所有Mac系统API调用 - 这里是CFStringCreateWithCString- 在Lazarus 1.6.4中运行在macOS Sierra 10.12.4中使用GDB 8.0和GDB 7.12.1,并且都失败了:

"尝试运行/单步执行应用程序时遇到调试和错误。找不到当前函数的边界">

并且调试器跳出函数(或者如果调用被try/except包围到后面的代码除外( - 稍后通知调试器不稳定

下面是示例代码:

procedure myTest;
var
TestStrUTF8: UTF8String;
TmpStrPr_CSS: ConstCStringPtr;
TmpCFStrRef: CFStringRef;
TmpStrPtr: Pointer;
begin
TestStrUTF8 := 'http://example.com';
TmpStrPtr := Pointer(TestStrUTF8)
TmpStrPtr_CSS := ConstCStringPtr(TmpStrPtr);
TmpCFStrRef := CStringCreateWithCString(nil, TmpStrPtr_CSS, kCFStringEncodinguTF8); // Note1: we are only using ASCII, Note2: We have tried KCFStringEncodingWindowsLatin1 with same problem
// jumps out of routine and reports "Cannot find bounds of current function" here
showmessage('never reaches, crashes first');
end;
  • 否则我在调试时没有问题。我可以逐步完成代码,不调用Mac系统API函数。我猜Lazarus/LCL/FPC库也在调用本机Mac API 函数,但该代码的编译方式不同,因此有效。
  • 我在主线程中运行上面的代码。
  • 此问题似乎发生在我尝试过的多个Mac API调用中, 所以我认为这可能是某种(GDB(调试器/拉撒路问题。

注意:我知道macOS Sierra 10.12.5可能存在调试器问题,这就是我尚未升级的原因。

他可能是SIP/地址搬迁/类似问题吗?

  • 在Debugger_Start_options中,我添加了"--eval-command=set 启动与外壳关闭"。
  • 当然,我也签了GDB。
  • 我使用自制啤酒进行GDB安装

是的,Sierra确实存在调试器问题(我不知道它们是否仅限于10.12.5(。

我正在运行 10.12.6,使用在 Xcode 下运行的 LLDB 来调试我的 Lazarus/FPC 应用程序,我得到了有用的结果。

请查看此页面 https://macpgmr.github.io/ObjP/ProjectXC.html 了解如何实现这一目标。

我也一直在研究在Mac上使用OmniPascal和VSCode与LLDB结合使用的可能性,以实现相同的目的,但方式要漂亮得多!

您可能想关注这个SO问题,看看我是否得到任何答案 如何让OmniPascal与macOS 10.12.6上的LLDB集成

最新更新