Lazarus调试Mac API调用问题(否则) - 无法找到当前函数的边界

时间:2017-07-03 11:15:32

标签: macos gdb lazarus

我正在尝试解决为什么我尝试调用的所有Mac系统API调用 - 这里 CFStringCreateWithCString - 在使用GDB 8.0和GDB 7.12的macOS Sierra 10.12.4中运行的Lazarus 1.6.4中。 1并且全部失败:

  

“尝试运行/步进应用程序时遇到调试问题并出错。无法找到当前函数的边界”

并且调试器跳出函数(,如果调用被尝试/除包围到之后的代码) - 之后通知调试器不稳定

...

以下是示例代码:

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)调试器/ Lazarus问题。

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

他的SIP /地址重定位/类似问题会出现问题吗?

  • Debugger_Start_options 中添加了“--eval-command = set startup-with-shell off“。
  • 我当然也签了GDB。
  • 我使用家酿为GDB安装

1 个答案:

答案 0 :(得分:1)

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

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

有关如何实现此目的,请查看此页面https://macpgmr.github.io/ObjP/ProjectXC.html

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

您可能想要关注此SO问题,看看我是否得到关于此How do I get OmniPascal to integrate with LLDB on the macOS 10.12.6

的任何答案