forked from OSchip/llvm-project
Added a simple test case to set breakpoints on objc class/instance methods.
Modified Makefile.rules to allow for overwriting the ARCH make variable. llvm-svn: 114118
This commit is contained in:
parent
c33cdcfd80
commit
6c17c0807e
|
@ -1,125 +1,6 @@
|
|||
#----------------------------------------------------------------------
|
||||
# Fill in the source files to build
|
||||
#----------------------------------------------------------------------
|
||||
C_SOURCES :=
|
||||
CXX_SOURCES :=
|
||||
OBJC_SOURCES :=main.m
|
||||
OBJCXX_SOURCES :=
|
||||
LEVEL = ../make
|
||||
|
||||
# Uncomment line below for debugging shell commands
|
||||
# SHELL = /bin/sh -x
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Change any build/tool options needed
|
||||
#----------------------------------------------------------------------
|
||||
DS := /usr/bin/dsymutil
|
||||
DSFLAGS =
|
||||
CFLAGS ?=-arch x86_64 -g -O0
|
||||
CPLUSPLUSFLAGS +=$(CFLAGS)
|
||||
CPPFLAGS +=$(CFLAGS)
|
||||
LD = gcc
|
||||
OBJC_SOURCES := main.m
|
||||
LDFLAGS = $(CFLAGS) -lobjc -framework Foundation
|
||||
OBJECTS =
|
||||
EXE=a.out
|
||||
DSYM=$(EXE).dSYM
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Check if we have any C source files
|
||||
#----------------------------------------------------------------------
|
||||
ifneq "$(strip $(C_SOURCES))" ""
|
||||
OBJECTS +=$(strip $(C_SOURCES:.c=.o))
|
||||
endif
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Check if we have any C++ source files
|
||||
#----------------------------------------------------------------------
|
||||
ifneq "$(strip $(CXX_SOURCES))" ""
|
||||
OBJECTS +=$(strip $(CXX_SOURCES:.cpp=.o))
|
||||
LD = g++
|
||||
endif
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Check if we have any ObjC source files
|
||||
#----------------------------------------------------------------------
|
||||
ifneq "$(strip $(OBJC_SOURCES))" ""
|
||||
OBJECTS +=$(strip $(OBJC_SOURCES:.m=.o))
|
||||
LDFLAGS +=-lobjc
|
||||
endif
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Check if we have any ObjC++ source files
|
||||
#----------------------------------------------------------------------
|
||||
ifneq "$(strip $(OBJCXX_SOURCES))" ""
|
||||
OBJECTS +=$(strip $(OBJCXX_SOURCES:.mm=.o))
|
||||
LD = g++
|
||||
ifeq $(findstring lobjc,$(LDFLAGS)) ""
|
||||
LDFLAGS +=-lobjc
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Make the dSYM file from the executable
|
||||
#----------------------------------------------------------------------
|
||||
$(DSYM) : $(EXE)
|
||||
$(DS) $(DSFLAGS) -o "$(DSYM)" "$(EXE)"
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Compile the executable from all the objects (default rule) with no
|
||||
# dsym file.
|
||||
#----------------------------------------------------------------------
|
||||
$(EXE) : $(OBJECTS)
|
||||
$(LD) $(LDFLAGS) $(OBJECTS) -o "$(EXE)"
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Automatic variables based on items already entered. Below we create
|
||||
# an objects lists from the list of sources by replacing all entries
|
||||
# that end with .c with .o, and we also create a list of prerequisite
|
||||
# files by replacing all .c files with .d.
|
||||
#----------------------------------------------------------------------
|
||||
PREREQS := $(OBJECTS:.o=.d)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Rule for Generating Prerequisites Automatically using .d files and
|
||||
# the compiler -MM option. The -M option will list all system headers,
|
||||
# and the -MM option will list all non-system dependencies.
|
||||
#----------------------------------------------------------------------
|
||||
%.d: %.c
|
||||
@set -e; rm -f $@; \
|
||||
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
|
||||
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
|
||||
rm -f $@.$$$$
|
||||
|
||||
%.d: %.cpp
|
||||
@set -e; rm -f $@; \
|
||||
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
|
||||
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
|
||||
rm -f $@.$$$$
|
||||
|
||||
%.d: %.m
|
||||
@set -e; rm -f $@; \
|
||||
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
|
||||
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
|
||||
rm -f $@.$$$$
|
||||
|
||||
%.d: %.mm
|
||||
@set -e; rm -f $@; \
|
||||
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
|
||||
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
|
||||
rm -f $@.$$$$
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Include all of the makefiles for each source file so we don't have
|
||||
# to manually track all of the prerequisites for each source file.
|
||||
#----------------------------------------------------------------------
|
||||
sinclude $(PREREQS)
|
||||
|
||||
.PHONY: clean
|
||||
dsym: $(DSYM)
|
||||
all: $(EXE) $(DSYM)
|
||||
clean:
|
||||
rm -rf "$(EXE)" "$(DSYM)" $(OBJECTS) $(PREREQS)
|
||||
|
||||
|
||||
|
||||
include $(LEVEL)/Makefile.rules
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
"""Set breakpoint on objective-c class and instance methods in foundation."""
|
||||
|
||||
import os, time
|
||||
import unittest2
|
||||
import lldb
|
||||
from lldbtest import *
|
||||
|
||||
@unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
|
||||
class FoundationTestCase(TestBase):
|
||||
|
||||
mydir = "foundation"
|
||||
|
||||
def test_with_dsym(self):
|
||||
"""Test 'image lookup -t days' and check for correct display."""
|
||||
self.buildDsym()
|
||||
self.break_on_objc_methods()
|
||||
|
||||
def test_with_dwarf(self):
|
||||
"""Test 'image lookup -t days' and check for correct display."""
|
||||
self.buildDwarf()
|
||||
self.break_on_objc_methods()
|
||||
|
||||
def break_on_objc_methods(self):
|
||||
"""Test setting objc breakpoints using regexp-break."""
|
||||
exe = os.path.join(os.getcwd(), "a.out")
|
||||
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
|
||||
|
||||
# Stop at +[NSString stringWithFormat:].
|
||||
self.expect("regexp-break +[NSString stringWithFormat:]", BREAKPOINT_CREATED,
|
||||
startstr = "Breakpoint created: 1: name = '+[NSString stringWithFormat:]', locations = 1")
|
||||
|
||||
# Stop at -[NSAutoreleasePool release].
|
||||
self.expect("regexp-break -[NSAutoreleasePool release]", BREAKPOINT_CREATED,
|
||||
startstr = "Breakpoint created: 2: name = '-[NSAutoreleasePool release]', locations = 1")
|
||||
|
||||
self.runCmd("run", RUN_SUCCEEDED)
|
||||
|
||||
# First stop is +[NSString stringWithFormat:].
|
||||
self.expect("thread backtrace", "Stop at +[NSString stringWithFormat:]",
|
||||
substrs = ["Foundation`+[NSString stringWithFormat:]"])
|
||||
|
||||
self.runCmd("process continue")
|
||||
|
||||
# Followed by -[NSAutoreleasePool release].
|
||||
self.expect("thread backtrace", "Stop at -[NSAutoreleasePool release]",
|
||||
substrs = ["Foundation`-[NSAutoreleasePool release]"])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import atexit
|
||||
lldb.SBDebugger.Initialize()
|
||||
atexit.register(lambda: lldb.SBDebugger.Terminate())
|
||||
unittest2.main()
|
|
@ -10,6 +10,8 @@ int main (int argc, char const *argv[])
|
|||
printf("sizeof(id) = %zu\n", sizeof(id));
|
||||
printf("sizeof(Class) = %zu\n", sizeof(Class));
|
||||
printf("sizeof(SEL) = %zu\n", sizeof(SEL));
|
||||
printf("[str length] = %zu\n", [str length]);
|
||||
printf("str = '%s'\n", [str cStringUsingEncoding: [NSString defaultCStringEncoding]]);
|
||||
[pool release];
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -10,13 +10,20 @@
|
|||
# Uncomment line below for debugging shell commands
|
||||
# SHELL = /bin/sh -x
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# If ARCH is not defined, default to x86_64.
|
||||
#----------------------------------------------------------------------
|
||||
ifeq "$(ARCH)" ""
|
||||
ARCH = x86_64
|
||||
endif
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Change any build/tool options needed
|
||||
#----------------------------------------------------------------------
|
||||
DS := /usr/bin/dsymutil
|
||||
DSFLAGS =
|
||||
CC = gcc
|
||||
CFLAGS ?=-arch x86_64 -gdwarf-2 -O0
|
||||
CFLAGS ?=-arch $(ARCH) -gdwarf-2 -O0
|
||||
CPLUSPLUSFLAGS +=$(CFLAGS)
|
||||
CPPFLAGS +=$(CFLAGS)
|
||||
LD = $(CC)
|
||||
|
|
Loading…
Reference in New Issue