我一直在搞乱 LLVM IR 的代码生成,有一点我不太明白,那就是什么时候必须分配局部变量,以及如何将文字值加载到局部变量中的区别。如果我将以下简单的 C 代码编译为 LLVM IR,
//test.c
int main() {
int x = 3;
int y = x + 4;
return y;
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
; ModuleID = 'test.c'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.10.0"
; Function Attrs: nounwind ssp uwtable
define i32 @main() #0 {
%1 = alloca i32, align 4
%x = alloca i32, align 4
%y = alloca i32, align 4
store i32 0, i32* %1
store i32 3, i32* %x, align 4
%2 …Run Code Online (Sandbox Code Playgroud) 可能重复:
带圆角的UIView
我希望有一个圆角的视图而不是尖锐的视角.有没有一些默认的方式这样做?
我有一个简单的ncurses程序设置,它使用getch()一次读取一个字符并将它们复制到缓冲区中.我遇到的问题是检测到按退格键.这是相关代码:
while((buffer[i] = c = getch()) != EOF) {
++i;
if (c == '\n') {
break;
}
else if (c == KEY_BACKSPACE || c == KEY_DC || c == 127) {
i--;
delch();
buffer[i] = 0;
}
refresh();
}
Run Code Online (Sandbox Code Playgroud)
但是在尝试运行此代码时,这是在尝试从"这是一个测试"行中删除字符后屏幕上显示的内容:
this is a test^?^?^?
Run Code Online (Sandbox Code Playgroud)
以及的内容buffer是:
this is a test
Run Code Online (Sandbox Code Playgroud)
使用gdb我知道正在调用if语句检查delete/backspace,那么我还应该做什么才能删除字符呢?
我的应用程序中有一个滚动视图,通过故事板初始化,我正在尝试更改框架.一切似乎都有效,但如果框架和内容大小在设置后很短的时间内被访问,但在我的方法返回后,它们就不同了!这是代码:
CGFloat inputHeight = inputView.frame.size.height;
originalContentHeight = self.scrollableContentView.frame.size.height;
NSLog(@"%f", self.scrollableContentView.frame.size.height-inputHeight);
[self.scrollableContentView setFrame:CGRectMake(self.scrollableContentView.frame.origin.x, self.scrollableContentView.frame.origin.y, self.scrollableContentView.frame.size.width, self.scrollableContentView.frame.size.height-inputHeight)];
NSLog(@"%f", self.scrollableContentView.frame.size.height);
NSLog(@"%@", self.scrollableContentView);
Run Code Online (Sandbox Code Playgroud)
这些日志的输出都是预期的,即:
<UIScrollView: 0x808de00; frame = (0 0; 320 81); ... >
Run Code Online (Sandbox Code Playgroud)
但是,如果我在另一个方法中设置断点,那么在调用时,记录scrollView会显示:
<UIScrollView: 0x808de00; frame = (0 0; 320 416); ... >
Run Code Online (Sandbox Code Playgroud)
此外,内容大小也会如此变化:
(width=320, height=416)
Run Code Online (Sandbox Code Playgroud)
至
(width=320, height=504)
Run Code Online (Sandbox Code Playgroud)
这两个值似乎都自动恢复为首次布局视图时的值.我在滚动视图的getter和setter中设置了断点,并且找不到任何意外的访问,因此我得出结论,更改必须在内部进行.这是一个合理的结论吗?怎么可能出错?
在我的应用程序中,我提出了一个模态视图控制器,但我遇到的问题我认为是由于我从子视图控制器呈现视图控制器这一事实.
调用presentViewController: animated:来自位于导航控制器堆栈上的视图控制器,并且该导航控制器使用Interface Builder中的"容器视图"包含在另一个视图控制器中.此外部容器视图控制器在屏幕顶部有一个持久性横幅.
当呈现视图控制器时,它会向上滚动动画,当它到达顶部时,它会进入容器视图控制器的横幅下方.但是,一旦动画结束,它再次出现在前面,但是在横幅所覆盖的模态视图控制器部分上不可能进行交互.从子视图控制器呈现模态视图控制器的正确方法是什么?
编辑:
我已经尝试直接访问容器视图控制器,它首先工作,但一旦模态视图控制器被解除,容器视图以某种方式扩展以填充整个屏幕,重叠整个横幅.
编辑:
截图:

模态视图控制器向上滑动并出现在顶部的横幅下方,然后突然跳到前面.
今天,在使用4.3 SDK 安装Xcode 4 后,我尝试启动我的应用程序.但是,应用程序将构建并且将弹出iOS模拟器,但是我在Xcode的窗口中收到一条消息,其中显示"附加到YourApp",它会无限期地保留在那里.如何解决这个问题?
我没有丰富的gdb经验,所以我不确定我的问题是否可行,但是可以用gdb编辑代码吗?
运行时(在遇到断点之后),disas看起来像这样:
0x080487d8 <+9>: movl $0x80485e4,0x1c(%esp)
0x080487e0 <+17>: movl $0x8048640,0x20(%esp)
0x080487e8 <+25>: movl $0x804869c,0x24(%esp)
0x080487f0 <+33>: movl $0x8048719,0x28(%esp)
Run Code Online (Sandbox Code Playgroud)
为了尝试更改其中一条指令中的地址,我这样做了:
set (*0x080487e1)=0x5b870408
Run Code Online (Sandbox Code Playgroud)
但不是像我预期的那样简单地改变地址,新的disas看起来像这样:
0x080487d8 <+9>: movl $0x80485e4,0x1c(%esp)
0x080487e0 <+17>: (bad)
0x080487e1 <+18>: or %al,(%edi,%eax,4)
0x080487e4 <+21>: pop %ebx
0x080487e5 <+22>: xchg %al,(%eax,%ecx,1)
0x080487e8 <+25>: movl $0x804869c,0x24(%esp)
0x080487f0 <+33>: movl $0x8048719,0x28(%esp)
Run Code Online (Sandbox Code Playgroud)
所以我有3个问题:我想做的是什么?如果是这样,我做错了什么?如果是这样,我做错了什么,我该如何解决?
我可能不会在正确的位置问这个问题,但是在某个地方我可以研究可执行二进制文件的结构是什么吗?如,代码的组织方式,符号的存储位置等.
我正在编写一个将成为基本视频游戏的应用程序,但keyUp:(NSEvent )和keyDown:(NSEvent)方法无法执行.
这是我的代码:
-(void)keyUp:(NSEvent*)event {
NSLog(@"Key %@", event);
}
-(void)keyDown:(NSEvent*)event {
switch( [event keyCode] ) {
case 126:
case 125:
case 124:
case 123:
NSLog(@"Arrow key pressed!");
break;
default:
NSLog(@"Key %@", event);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我确定它在NSResponder的子类中(虽然它在NSOpenGLView中,可能会影响它吗?)然后我没有看到任何问题.任何帮助都非常有用.谢谢 :)
我正在使用适用于iPhone的OpenCV版本,我遇到了一些奇怪的错误.在使用拼接器时,一些导入的标题现在正在抱怨此行上无法匹配的"{":
enum { NO, FEATHER, MULTI_BAND };
Run Code Online (Sandbox Code Playgroud)
NO 来自objc.h的宏,定义为
#define NO __objc_no
Run Code Online (Sandbox Code Playgroud)
并且编译器期望'}'匹配枚举的开头,即使稍后有一个.怎么了?
objective-c ×6
iphone ×5
assembly ×3
ios ×2
binary ×1
binaryfiles ×1
c ×1
cocoa ×1
executable ×1
gdb ×1
keydown ×1
llvm ×1
llvm-clang ×1
llvm-ir ×1
macos ×1
ncurses ×1
opencv ×1
uiscrollview ×1
xcode ×1
xcode4 ×1