cocoa – 如何使用gdb打印和使用常量(通过Xcode)?

cocoa – 如何使用gdb打印和使用常量(通过Xcode)?,第1张

概述我正在使用 xcode-gdb调试 Cocoa应用程序.我处于断点,我希望查看一些Cocoa常量(即NSControlKeyMask)的值,并使用当前堆栈帧中的值进行一些测试.具体来说,我在 - (void) keyDown:(NSEvent *) e  ,我已经完成了 set $mf = (int)[e modifierFlags]  在gdb提示符上.现在我想做 p $mf & NSContr 我正在使用 xcode-gdb调试 Cocoa应用程序.我处于断点,我希望查看一些Cocoa常量(即NSControlKeyMask)的值,并使用当前堆栈帧中的值进行一些测试.具体来说,我在

- (voID) keyDown:(NSEvent *) e 

 ,我已经完成了

set $mf = (int)[e modifIErFlags]

 在gdb提示符上.现在我想做

p $mf & NSControlKeyMask

 并且gdb告诉我’当前上下文中没有符号“NSControlKeyMask”.

更新:
Xcode具有“Fix and Continue text”功能.所以我使用了Dan M.和n8gray解决方案,因此我不需要对每个常量进行代理.

解决方法 如果没有实际使用给定类型实例化变量,则相应符号的调试信息不​​会被gcc生成.然后,如果你问gdb这种类型,它不知道你在说什么,因为没有该类型的调试信息,它会给你“当前上下文中没有符号”错误.

解决此问题的方法通常是在代码中的某处显式添加有问题类型的虚拟变量.这是一个简单的例子,你可以测试看看我在说什么:

enum an_enum_type {  foo,bar,baz};int main (int argc,char *argv []){  return baz;}

将该程序保存到名为test.cpp的文件中,并使用以下命令对其进行编译:

g++ -o test -g -O0 test.cpp

然后在gdb下运行它并输入“p / x baz”.您将获得“当前上下文中没有符号baz”错误.

现在尝试使用这个已添加枚举类型的虚拟变量的修改版本:

enum an_enum_type {  foo,baz};an_enum_type dummy;int main (int argc,char *argv []){  return baz;}

使用与以前相同的命令编译并在gdb下运行.这次当你输入“p / x baz”时,你会得到“0x2”作为答案,我认为这是你在问题中拍摄的内容.

我调查了它,问题是NSEvent.h头文件没有给包含NSControlKeyMask的枚举命名 – 它是一个匿名枚举.因此无法创建该类型的变量(虚拟或其他).所以,我没有看到让编译器生成该类型的调试信息的任何方法.我想你只需要依赖头文件中NSControlKeyMask的定义.

总结

以上是内存溢出为你收集整理的cocoa – 如何使用gdb打印和使用常量(通过Xcode)?全部内容,希望文章能够帮你解决cocoa – 如何使用gdb打印和使用常量(通过Xcode)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1013760.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存