Tag: lldb

打印双类型结构成员时LLDB中的奇怪行为

在某些iOS代码中,我在一个对象上有一个C struct ivar。 此结构的一个成员是double类型。 如果我在一个方法中,分配给这个struct成员,当我打印struct本身时,调试器会报告这个struct成员的值的虚假值(就像变量的列表视图一样),但是当我直接打印struct成员时, ( p structWithDouble.doubleMember ),我得到了正确的值。 此外,如果我将此成员的值分配给本地自动double变量,我会在列表视图中和打印时看到正确的值。 我认为这是LLDB的一个问题,但令人不安和令人沮丧。 这是一个已知的问题? 如果是这样,有解决方法吗? 例子 typedef struct { double doubleMember; } structWithDouble; @interface MyClass : NSObject { structWithDouble structAsIvar; } @end @implementation – (void)someMethod { structAsIvar.doubleMember = 200.0; double localDouble = structAsIvar.doubleMember; } 在someMethod: ,调试器变量列表显示以下值: structAsIvar.doubleMember (double) 1.65865e-307 localDouble (double) 200 在LLDB中,在someMethod:中断时,我得到以下输出: (lldb) p structAsIvar.doubleMember (double) […]

gdb / lldb调用一个函数并中断它

我有一个长期计划的全局function: int test() { int a = 12; int c = 10; printf(“a=%d”,a); a += c ; printf(“a=%d”, a); return a; } 我调试程序并中断,然后发出以下命令: (lldb) call test() a=12a=22(int) $0 = 22 (lldb) 我希望它在我call test()之后每一行都在test()方法中断,而不是立即返回结果。 谁知道怎么做? ————————————以下答案———— ———————— @Jason Molenda的答案是正确的答案,使用expr -i0 — test()而不是call test() : (lldb) b test Breakpoint 1: 4 locations. (lldb) expr -i0 — test() […]

C缓冲区溢出 – 为什么有一个固定的字节数会导致段错误? (Mac OS 10.8 64位,铿锵)

我在C中试验缓冲区溢出,发现了一个有趣的怪癖: 对于任何给定的数组大小,似乎有一定数量的溢出字节可以在SIGABRT崩溃之前写入内存。 例如,在下面的代码中,10字节数组可以在27处崩溃之前溢出到26个字节。类似地,在第41个char中止之前,20个char的数组可以溢出到40个char 。 谁能解释为什么会这样? 此外,SIGABRT是否与“分段故障”相同(或由其引起)? Mac OS 10.8 – Xcode 4.6,clang和lldb。 谢谢! #include int main(int argc, const char * argv[]) { char aString[ 10 ]; char aLetter = ‘a’; printf(“The size of one array slot sizeof( aString[0] ) is %zu\n”, sizeof(aString[0])); printf(“The size of one letter sizeof( aLetter ) is %zu\n”, sizeof(aLetter)); // Overflow […]

在Xcode中,如何使用您拥有源的外部库进行调试?

我在Xcode中为OS X开发了一个大型的C / C ++ / Objective-C项目。 该项目链接到预先构建的Qt5库。 这一切都非常好用,直到崩溃并且我得到一个带有Qt函数的堆栈跟踪。 如果我点击其中一个Qt函数的堆栈框架,Xcode / lldb显示汇编而不是源代码 – 我使用Qt作为外部库,所以我的项目中没有任何Qt源代码。 我怎样才能解决这个问题? 我已经尝试将Qt5源添加到项目而不将其添加到我的可执行目标,但是Xcode / lldb仍然没有“看到”源或者发现我添加到项目中的源文件是相同的源文件在Qt调试符号中引用。 如何告诉Xcode / lldb在哪里找到我正在使用的外部库的源代码? 编辑: 只是为了在这里添加更多细节,当我在Xcode / lldb控制台中输入’target modules lookup -t QMenuBar’时,这就是我所看到的: Best match found in /Users/ted/Documents/Projects/XXX/_build_osx/Output/Debug/XXX.app/Contents/MacOS/XXX: id = {0x7100042d49}, name = “QMenuBar”, byte-size = 48, decl = qmenubar.h:57, clang_type = “class QMenuBar : public QWidget { static […]

无法获取lldb来读取文件输入

我正在使用lldb作为OSX中的独立调试器。 我正在尝试使用文本文件作为输入来调试C可执行文件。 lldb文档指定了以下用于将stdin更改为给定文件的命令: process launch -i 使用此命令,lldb似乎忽略指定的文件,而不是等待键盘输入。 这是预期的行为吗? 如果是这样; 我需要做什么才能真正让进程对我想要的输入文件进行操作? tl; dr:我如何让lldb模仿标准终端执行,如: ./executable <

为什么不再lldb转发我的环境变量?

我正在为FFmpeg编写补丁,需要调试我的代码。 我正在加载一个外部库,为了测试不同的库版本,我将它们放在不同的文件夹中。 要选择我想要使用的那个,我一直在使用DYLD_LIBRARY_PATH=/path/to/lib/dir ./ffmpeg ,这样可以正常工作。 但是当我在lldb尝试它时,崩溃说dyld: Library not loaded而Reason: image not found 。 这曾经用于Xcode 7.1之前,但我刚刚升级,它停止工作。 这是我的MVCE: #include #include int main() { char* str = getenv(“DYLD_LIBRARY_PATH”); if (str) puts(str); else puts(“(null)”); return 0; } 按如下方式运行此程序会产生输出: $ ./a.out (null) $ DYLD_LIBRARY_PATH=/tmp ./a.out /tmp 那看起来还不错。 但是当我尝试使用lldb时它会失败: $ DYLD_LIBRARY_PATH=/tmp lldb ./a.out (lldb) target create “./a.out” Current executable set to […]