Merge remote-tracking branch 'origin/2.5'

Conflicts:
	qtcreator.pri
	src/libs/utils/utils.qbs
	src/plugins/projectexplorer/miniprojecttargetselector.cpp
	src/plugins/qmljseditor/qmljseditor.qbs
	src/plugins/qmljsinspector/qmljsinspector.qbs

Change-Id: Ib239d50c21cb06d3a8e821e03dc093552f40ffab
This commit is contained in:
Oswald Buddenhagen
2012-04-19 16:13:09 +02:00
99 changed files with 2757 additions and 371 deletions
+3
View File
@@ -78,6 +78,9 @@ doc/api/html/*
doc/pluginhowto/html/*
.rcc
.pch
dist/gdb/qtcreator-*
dist/gdb/source
dist/gdb/staging
# Binaries
# --------
+95
View File
@@ -0,0 +1,95 @@
broot=${PWD}
source=${broot}/source
targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf
staging=${broot}/staging
pyversion=2.7
expatversion=2.0.1
arch=`uname -sm | sed 's/ /-/g' | tr A-Z a-z`
version=7.4
targetdir=${broot}/qtcreator-gdb-${version}
gdbtargets=$(addprefix ${targetdir}/gdb-, ${targets})
packagename=qtcreator-gdb-${version}-${arch}.tar.gz
all:package
gdb-7.4: override version=7.4
gdb-7.4: ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a
${MAKE} version=${version}
clean:
rm -rf ${broot}/qtcreator-gdb-* ${staging}/gdb-* qtcreator-gdb-*.tar.gz
makesourcedir:
test -e ${source} || mkdir ${source}
maketargetdir:
test -e ${targetdir} || mkdir ${targetdir}
makestagingdir:
test -e ${staging} || mkdir ${staging}
${source}/expat-${expatversion}.tar.gz: | makesourcedir
cd ${source}; wget http://sourceforge.net/projects/expat/files/expat/${expatversion}/expat-${expatversion}.tar.gz && \
touch ${source}/expat-${expatversion}.tar.gz
${source}/Python-${pyversion}.tgz: | makesourcedir
cd ${source}; wget http://www.python.org/ftp/python/${pyversion}/Python-${pyversion}.tgz && \
touch ${source}/Python-${pyversion}.tgz
${source}/gdb-${version}.tar.bz2: | makesourcedir
cd ${source} &&\
wget http://ftp.gnu.org/gnu/gdb/gdb-${version}.tar.bz2 || \
wget -O gdb-${version}.tar.bz2 http://ftp.gnu.org/gnu/gdb/gdb-${version}a.tar.bz2 && \
touch gdb-*.tar.bz2
${staging}/lib/libexpat.a: ${source}/expat-${expatversion}.tar.gz | makestagingdir
cd ${staging} && tar xvf ${source}/expat-${expatversion}.tar.gz && cd expat-${expatversion} && \
./configure --disable-shared -prefix=${staging} && ${MAKE} && ${MAKE} install
${staging}/lib/libpython${pyversion}.a: ${source}/Python-${pyversion}.tgz | makestagingdir
unset PYTHONHOME && cd ${staging} && tar xvf ${source}/Python-${pyversion}.tgz && cd Python-${pyversion} && \
export LDFLAGS="-pthread -lm" && \
./configure --prefix=${staging} && ${MAKE} && ${MAKE} install
${targetdir}/python/include/python${pyversion}/pyconfig.h: ${staging}/lib/libpython${pyversion}.a | maketargetdir
mkdir -p ${targetdir}/python/lib && cp -a ${staging}/lib/python${pyversion} ${targetdir}/python/lib/
mkdir -p ${targetdir}/python/include/python${pyversion} && cp ${staging}/include/python${pyversion}/pyconfig.h ${targetdir}/python/include/python${pyversion}/
${staging}/gdb-${version}/configure: ${source}/gdb-${version}.tar.bz2 | makestagingdir
cd ${staging} && \
tar xvf ${source}/gdb-${version}.tar.bz2 && \
cd gdb-${version} && \
touch configure && \
patch -p2 < ${broot}/patches/pythonhome-7.4.patch && \
patch -p1 < ${broot}/patches/gdb-buildid-locate.patch && \
patch -p1 < ${broot}/patches/gdb-ipv6.patch && \
patch -p1 < ${broot}/patches/gdb-work-around-trk-single-step.patch
${gdbtargets}: ${targetdir}/gdb-%: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
test -e ${staging}/gdb-${version}-$* || mkdir ${staging}/gdb-${version}-$*
export PYTHONHOME=${staging} && \
export PATH="${staging}/bin/:$$PATH" && \
export LDFLAGS="-pthread -lm" && \
cd ${staging}/gdb-${version}-$* && \
${staging}/gdb-${version}/configure --disable-nls --target=$* --with-python=${staging} --with-libexpat-prefix=${staging} && \
sleep 3 && \
${MAKE} MAKEFLAGS+=-j1 && \
strip gdb/gdb && \
cp -T gdb/gdb ${targetdir}/gdb-$*
${targetdir}/gdb: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
test -e ${staging}/gdb-${version}-${arch} || mkdir ${staging}/gdb-${version}-${arch}
export PYTHONHOME=${staging} && \
export PATH="${staging}/bin/:$$PATH" && \
export LDFLAGS="-pthread -lm" && \
cd ${staging}/gdb-${version}-${arch} && \
${staging}/gdb-${version}/configure --disable-nls --with-python=${staging} --with-libexpat-prefix=${staging} && \
${MAKE} MAKEFLAGS+=-j1 && \
strip gdb/gdb && \
cp -T gdb/gdb ${targetdir}/gdb
package: ${gdbtargets} ${targetdir}/gdb ${targetdir}/python/include/python${pyversion}/pyconfig.h
mv ${targetdir} ${targetdir}-${arch}
tar cvzf ${packagename} qtcreator-gdb-${version}-${arch}
mv ${targetdir}-${arch} ${targetdir}
+101
View File
@@ -0,0 +1,101 @@
broot=${PWD}
source=${broot}/source
targets=arm-none-symbianelf arm-none-linux-gnueabi i686-pc-mingw32
staging=${broot}/staging
pyversion=2.7
pydir=${broot}/python
expatversion=2.0.1
iconvversion=1.14
version=7.4
targetdir=${broot}/qtcreator-gdb-${version}
gdbtargets=$(addprefix ${targetdir}/gdb-, ${targets})
packageparts=${targetdir}/lib ${targetdir}/lib ${targetdir}/libiconv-2.dll ${targetdir}/python27.dll ${targetdir}/libexpat-1.dll
arch=`uname -sm | sed 's/ /-/g' | tr A-Z a-z`
packagename=qtcreator-gdb-${version}-${arch}.tar.gz
all: package
gdb-7.4: override version=7.4
gdb-7.4:
${MAKE} version=${version}
clean:
rm -rf ${broot}/qtcreator-gdb-* ${staging}/gdb-*
distclean:
rm -rf ${staging} ${source} ${broot}/qtcreator-gdb-*
makesourcedir:
test -e ${source} || mkdir ${source}
maketargetdir:
test -e ${targetdir} || mkdir ${targetdir}
makestagingdir:
test -e ${staging} || mkdir ${staging}
checkwget:
wget -V &> /dev/null || mingw-get install msys-wget-bin
${source}/gdb-${version}.tar.bz2: | makesourcedir checkwget
cd ${source} && \
wget http://ftp.gnu.org/gnu/gdb/gdb-${version}.tar.bz2 || \
wget -O gdb-${version}.tar.bz2 http://ftp.gnu.org/gnu/gdb/gdb-${version}a.tar.bz2 && \
touch gdb-${version}.tar.bz2
${source}/libiconv-${iconvversion}.tar.gz: | makesourcedir checkwget
cd ${source} && \
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${iconvversion}.tar.gz && \
touch ${source}/libiconv-${iconvversion}.tar.gz
${source}/expat-${expatversion}.tar.gz: | makesourcedir checkwget
cd ${source} &&\
wget http://sourceforge.net/projects/expat/files/expat/${expatversion}/expat-${expatversion}.tar.gz/download && \
touch ${source}/expat-${expatversion}.tar.gz
${staging}/gdb-${version}/configure: ${source}/gdb-${version}.tar.bz2 | makestagingdir
cd ${staging} && \
tar xvf ${source}/gdb-${version}.tar.bz2 && \
cd gdb-${version} && \
touch configure && \
patch -p1 < ${broot}/patches/gdb-ipv6.patch && \
patch -p1 < ${broot}/patches/gdb-target-debugging.patch
${staging}/lib/libiconv.a: ${source}/libiconv-${iconvversion}.tar.gz | makestagingdir
cd ${staging} && \
tar xvf ${source}/libiconv-${iconvversion}.tar.gz && \
cd libiconv-${iconvversion} && \
./configure -prefix=${staging} --enable-static && \
${MAKE} && ${MAKE} install
${staging}/lib/libexpat.a: ${source}/expat-${expatversion}.tar.gz | makestagingdir
cd ${staging} && \
tar xvf ${source}/expat-${expatversion}.tar.gz && \
cd expat-${expatversion} && \
./configure -prefix=${staging} --enable-static && \
${MAKE} && ${MAKE} install
${gdbtargets}: ${targetdir}/gdb-%: ${staging}/lib/libexpat.a ${staging}/lib/libiconv.a ${staging}/gdb-${version}/configure | maketargetdir
test -e ${staging}/gdb-${version}-$* || mkdir ${staging}/gdb-${version}-$*
export PYTHONHOME=${pydir} && \
LDFLAGS="L${pydir} -lpthread -ldl -lutil -lpython27" && \
CFLAGS="-I${pydir}/include" && \
cd ${staging}/gdb-${version}-$* && \
${staging}/gdb-${version}/configure --target=$* --disable-nls \
--with-libiconv-prefix=${staging} \
--with-expat --with-libexpat-prefix=${staging} \
--with-python=${pydir} &&\
${MAKE} MAKEFLAGS+= -j1 &&\
strip gdb/gdb.exe && \
cp -T gdb/gdb.exe ${targetdir}/gdb-$*.exe
package: ${gdbtargets}
cp ${staging}/bin/libiconv* ${targetdir} && \
cp ${staging}/bin/libexpat* ${targetdir} && \
cp ${pydir}/python*.dll ${targetdir} && \
cp -r ${pydir}/lib ${targetdir} && \
cp -r ${pydir}/include ${targetdir} && \
mv ${targetdir} ${targetdir}-${arch} && \
tar cvzf ${packagename} qtcreator-gdb-${version}-${arch} && \
mv ${targetdir}-${arch} ${targetdir}
+89
View File
@@ -0,0 +1,89 @@
broot=${PWD}
source=${broot}/source
targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf
staging=${broot}/staging
pyversion=2.7
expatversion=2.0.1
arch=`uname -sm | sed 's/ /-/g' | tr A-Z a-z`
version=7.4
targetdir=${broot}/qtcreator-gdb-${version}
gdbtargets=$(addprefix ${targetdir}/gdb-, ${targets})
packagename=qtcreator-gdb-${version}-${arch}.tar.gz
all:package
gdb-7.4: override version=7.4
gdb-7.4: ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a
${MAKE} version=${version}
clean:
rm -rf ${broot}/qtcreator-gdb-* ${staging}/gdb-* qtcreator-gdb-*.tar.gz
makesourcedir:
test -e ${source} || mkdir ${source}
maketargetdir:
test -e ${targetdir} || mkdir ${targetdir}
makestagingdir:
test -e ${staging} || mkdir ${staging}
${source}/expat-${expatversion}.tar.gz: | makesourcedir
cd ${source}; curl -LOf http://sourceforge.net/projects/expat/files/expat/${expatversion}/expat-${expatversion}.tar.gz && \
touch ${source}/expat-${expatversion}.tar.gz
${source}/Python-${pyversion}.tgz: | makesourcedir
cd ${source}; curl -Of http://www.python.org/ftp/python/${pyversion}/Python-${pyversion}.tgz && \
touch ${source}/Python-${pyversion}.tgz
${source}/gdb-${version}.tar.bz2: | makesourcedir
cd ${source} && \
curl -Of http://ftp.gnu.org/gnu/gdb/gdb-${version}.tar.bz2 || \
curl -of gdb-${version}.tar.bz2 http://ftp.gnu.org/gnu/gdb/gdb-${version}a.tar.bz2 && \
touch gdb-*.tar.bz2
${staging}/lib/libexpat.a: ${source}/expat-${expatversion}.tar.gz | makestagingdir
cd ${staging} && tar xvf ${source}/expat-${expatversion}.tar.gz && cd expat-${expatversion} && \
./configure --disable-shared -prefix=/ && ${MAKE} && ${MAKE} install
${staging}/lib/libpython${pyversion}.a: ${source}/Python-${pyversion}.tgz | makestagingdir
unset PYTHONHOME && cd ${staging} && tar xvf ${source}/Python-${pyversion}.tgz && cd Python-${pyversion} && \
./configure --prefix=${staging} && ${MAKE} && ${MAKE} install
${targetdir}/python/include/python${pyversion}/pyconfig.h: ${staging}/lib/libpython${pyversion}.a | maketargetdir
mkdir -p ${targetdir}/python/lib && cp -a ${staging}/lib/python${pyversion} ${targetdir}/python/lib/
mkdir -p ${targetdir}/python/include/python${pyversion} && cp ${staging}/include/python${pyversion}/pyconfig.h ${targetdir}/python/include/python${pyversion}/
${staging}/gdb-${version}/configure: ${source}/gdb-${version}.tar.bz2 | makestagingdir
cd ${staging} && \
tar xvf ${source}/gdb-${version}.tar.bz2 && \
cd gdb-${version} && \
touch configure && \
patch -p2 < ${broot}/patches/pythonhome-${version}.patch && \
patch -p1 < ${broot}/patches/gdb-ipv6.patch
${gdbtargets}: ${targetdir}/gdb-%: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
test -e ${staging}/gdb-${version}-$* || mkdir ${staging}/gdb-${version}-$*
export PYTHONHOME=${staging} && \
export PATH="${staging}/bin/:$$PATH" && \
cd ${staging}/gdb-${version}-$* && \
${staging}/gdb-${version}/configure --disable-nls --target=$* --with-python=${staging} --with-libexpat-prefix=${staging} && \
${MAKE} MAKEFLAGS+=-j1 && \
strip gdb/gdb && \
mv gdb/gdb ${targetdir}/gdb-$*
${targetdir}/gdb: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
test -e ${staging}/gdb-${version}-${arch} || mkdir ${staging}/gdb-${version}-${arch}
export PYTHONHOME=${staging} && \
export PATH="${staging}/bin/:$$PATH" && \
cd ${staging}/gdb-${version}-${arch} && \
${staging}/gdb-${version}/configure --disable-nls --with-python=${staging} --with-libexpat-prefix=${staging} --disable-werror && \
${MAKE} MAKEFLAGS+=-j1 && \
strip gdb/gdb && \
mv gdb/gdb ${targetdir}/gdb
package: ${gdbtargets} ${targetdir}/gdb ${targetdir}/python/include/python${pyversion}/pyconfig.h
mv ${targetdir} ${targetdir}-${arch}
tar cvzf ${packagename} qtcreator-gdb-${version}-${arch}
mv ${targetdir}-${arch} ${targetdir}
File diff suppressed because it is too large Load Diff
+1100
View File
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
--- src/gdb/infcmd.c 2012/02/15 19:13:13
+++ src/gdb/infcmd.c 2012/02/23 08:15:04
@@ -1636,6 +1636,7 @@
static void
finish_forward (struct symbol *function, struct frame_info *frame)
{
+ struct frame_id frame_id = get_frame_id (frame);
struct gdbarch *gdbarch = get_frame_arch (frame);
struct symtab_and_line sal;
struct thread_info *tp = inferior_thread ();
@@ -1653,7 +1654,7 @@
old_chain = make_cleanup_delete_breakpoint (breakpoint);
- set_longjmp_breakpoint (tp, get_frame_id (frame));
+ set_longjmp_breakpoint (tp, frame_id);
make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
/* We want stop_registers, please... */
+38
View File
@@ -0,0 +1,38 @@
*** source/gdb-7.4/gdb/python/python.c 2012-02-01 10:39:59.812953656 +0100
--- staging/gdb-7.4/gdb/python/python.c 2012-02-01 10:33:45.842953480 +0100
***************
*** 32,38 ****
#include "serial.h"
#include "readline/tilde.h"
#include "python.h"
!
#include <ctype.h>
/* Declared constants and enum for python stack printing. */
--- 32,38 ----
#include "serial.h"
#include "readline/tilde.h"
#include "python.h"
! #include <libgen.h>
#include <ctype.h>
/* Declared constants and enum for python stack printing. */
***************
*** 1273,1278 ****
--- 1273,1288 ----
SLASH_STRING, "python", NULL));
#endif
+
+ char readlinkbuffer[BUFSIZ];
+ int readlinks = readlink("/proc/self/exe", readlinkbuffer, BUFSIZ - 1);
+ readlinkbuffer[readlinks] = 0;
+ char *executeablepath = dirname(readlinkbuffer);
+ char *pythonhome = malloc(strlen(executeablepath) + strlen("/python/") + 2);
+ strcpy(pythonhome, executeablepath);
+ strcat(pythonhome, "/python/");
+ setenv("PYTHONHOME", pythonhome, 1);
+
Py_Initialize ();
PyEval_InitThreads ();
Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 B

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 B

After

Width:  |  Height:  |  Size: 728 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 930 B

After

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 964 B

After

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 826 B

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 29 KiB

@@ -27,7 +27,7 @@
/*!
\contentspage index.html
\previouspage creator-debugging.html
\previouspage creator-debugging-qml.html
\page creator-debugging-example.html
\nextpage creator-qml-debugging-example.html
@@ -103,6 +103,13 @@
If you compile and run the above code, however, the application does not
work correctly due to a logic error. To locate this logic error, step
through the code using the following buttons:
\inlineimage qtcreator-debug-button-stop.png
(\gui Stop),
\inlineimage qtcreator-debug-button-step-over.png
(\gui {Step Over}),
\inlineimage qtcreator-debug-button-step-into.png
(\gui {Step Into}), and
\inlineimage qtcreator-debug-button-step-out.png
(\gui {Step Out}).
\image qtcreator-debugging-buttons.png
*/
+7 -7
View File
@@ -29,7 +29,7 @@
\contentspage index.html
\previouspage creator-testing.html
\page creator-debugging.html
\nextpage creator-debugging-example.html
\nextpage creator-debugger-engines.html
\title Debugging
@@ -100,7 +100,7 @@
/*!
\contentspage index.html
\previouspage creator-qml-debugging-example.html
\previouspage creator-debugger-engines.html
\page creator-debugger-operating-modes.html
\nextpage creator-debug-mode.html
@@ -362,9 +362,9 @@
/*!
\contentspage index.html
\previouspage creator-debug-mode.html
\previouspage creator-debugging.html
\page creator-debugger-engines.html
\nextpage creator-debugging-helpers.html
\nextpage creator-debugger-operating-modes.html
\title Setting Up Debugger
@@ -695,7 +695,7 @@
\contentspage index.html
\previouspage creator-debugger-operating-modes.html
\page creator-debug-mode.html
\nextpage creator-debugger-engines.html
\nextpage creator-debugging-helpers.html
\title Interacting with the Debugger
@@ -1092,7 +1092,7 @@
/*!
\contentspage index.html
\previouspage creator-debugger-engines.html
\previouspage creator-debug-mode.html
\page creator-debugging-helpers.html
\nextpage creator-debugging-qml.html
@@ -1439,7 +1439,7 @@
/*!
\contentspage index.html
\previouspage creator-debugging-qml.html
\previouspage creator-qml-debugging-example.html
\page creator-troubleshooting-debugging.html
\nextpage creator-analyze-mode.html
@@ -29,7 +29,7 @@
\contentspage index.html
\previouspage creator-debugging-example.html
\page creator-qml-debugging-example.html
\nextpage creator-debugger-operating-modes.html
\nextpage creator-troubleshooting-debugging.html
\title Debugging a Qt Quick Example Application
@@ -49,7 +49,7 @@
\o To look at the code that starts a new game, place a breakpoint in
samegame.qml by clicking between the line number and the window
border on the line where where the \c startNewGame() function is
called.
called (1).
\image qtquick-example-setting-breakpoint1.png
@@ -70,7 +70,7 @@
\image qtquick-example-setting-breakpoint2.png
\o Click the
\inlineimage qml-inspector-step-into.png
\inlineimage qtcreator-debug-button-step-into.png
(\gui {Step Into}) button on the toolbar or press \key F11 to step
into the code in the stack. The samegame.js file opens in the code
editor at the function that starts a new game.
@@ -88,7 +88,7 @@
\image qtquick-example-setting-breakpoint3.png
\o To execute JavaScript commands in the current context, select the
\gui {QML Script Console} tab.
\gui {Console} tab.
\o To change the score to 1000, enter \c{gameCanvas.score = 1000}
in the console.
@@ -111,8 +111,8 @@
\o Click
\inlineimage qml-inspector-select-button.png
(\gui Select) to activate selection mode and then click the
\gui {New Game} button to move into the \gui newGameButton component
in the \gui {QML Script Console} and the code editor.
\gui {Quit} button to move into the \gui ButtonLabel component
in the \gui {Console} and the code editor.
\image qtquick-example-property-values.png
+12 -14
View File
@@ -29,7 +29,7 @@
\contentspage index.html
\previouspage creator-debugging-helpers.html
\page creator-debugging-qml.html
\nextpage creator-troubleshooting-debugging.html
\nextpage creator-debugging-example.html
\title Debugging Qt Quick Projects
@@ -159,10 +159,10 @@
\section1 Executing JavaScript Expressions
When the application is interrupted by a breakpoint, you can use the
\gui {QML Script Console} to execute JavaScript expressions in the current
context. To open it, choose \gui {Window > View > QML Script Console}.
\gui {Console} to execute JavaScript expressions in the current
context. To open it, choose \gui {Window > Views > Console}.
\image qml-script-console.png "QML Script Console view"
\image qml-script-console.png "Console view"
You can type JavaScript expressions and use them to get information about
the state or your application. You can change property values temporarily,
@@ -174,11 +174,11 @@
If you change property values or add properties in the code editor, the
debugger can update the properties in the running application when you save
the file. This is enabled by default. To disable it, click
the file. This is enabled by default. To disable it, click the
\inlineimage qml-observer-bar-reload.png "Apply Changes on Save button"
on the toolbar.
(\gui {Apply Changes on Save}) button on the toolbar.
When you change property values in the \gui {QML Script Console} or
When you change property values in the \gui {Console} or
\gui {QML Inspector}, they are immediately updated in the running
application, but not in the source code.
@@ -249,8 +249,8 @@
contains zoom controls.
To inspect colors, click the \gui {Color Picker} button. You can also click
\inlineimage qml-observer-bar-copy-color.png "Copy Color button"
to copy the color definition to the clipboard.
\inlineimage qml-observer-bar-copy-color.png "Color Picker button"
(\gui {Color Picker}) to copy the color definition to the clipboard.
To switch out of the inspection mode, deselect the \gui Select, \gui Zoom,
and \gui {Color Picker} button.
@@ -260,14 +260,12 @@
To play and pause animations in the running application, select
\inlineimage qml-inspector-play.png
and
(\gui {Play Animations}) and
\inlineimage qml-inspector-pause.png
on the toolbar.
(\gui {Pause Animations}) on the toolbar.
To change the speed at which animations are played, click and hold down
\inlineimage qml-inspector-play.png
or
\inlineimage qml-inspector-pause.png
\gui {Play/Pause Animations}
and select a value.
*/
+4 -1
View File
@@ -1,7 +1,10 @@
\section2 Generating SSH Keys
If you do not have an SSH public and private key pair, you can generate it
in \QC. You can specify key length and the key algorithm, RSA or DSA.
in \QC. The connection wizard can create the key pair for you, or you can
create it separately.
You can specify key length and the key algorithm, RSA or DSA.
If you only use the keys to protect connections to the emulator or
device, you can use the default values.
+3 -3
View File
@@ -236,13 +236,13 @@
\list
\o \l{Debugging}
\list
\o \l{Debugging a C++ Example Application}
\o \l{Debugging a Qt Quick Example Application}
\o \l{Setting Up Debugger}
\o \l{Launching the Debugger}
\o \l{Interacting with the Debugger}
\o \l{Setting Up Debugger}
\o \l{Using Debugging Helpers}
\o \l{Debugging Qt Quick Projects}
\o \l{Debugging a C++ Example Application}
\o \l{Debugging a Qt Quick Example Application}
\o \l{Troubleshooting Debugger}
\endlist
\o \l{Analyzing Code}
@@ -223,7 +223,7 @@
\o In the \gui {Create SIS Package} step, select \gui {Self-signed certificate}.
\o In the \gui {Deploy SIS Package} step, click \gui {Remove Item} to
\o In the \gui {Deploy SIS Package} step, click \gui {Remove Item} (1) to
skip the step of copying the SIS file to a device. The SIS file is created
in the project folder.
+32 -51
View File
@@ -501,15 +501,16 @@ def checkSimpleRef(ref):
check(count < 1000000)
def checkRef(ref):
# assume there aren't a million references to any object
if qtMajorVersion() >= 5:
count = ref["atomic"]["_q_value"]
check(count >= -1)
check(count < 1000000)
else:
count = ref["_q_value"]
check(count > 0)
check(count < 1000000)
try:
count = ref["atomic"]["_q_value"] # Qt 5.
minimum = -1
except:
count = ref["_q_value"] # Qt 4.
minimum = 0
# Assume there aren't a million references to any object.
check(count >= minimum)
check(count < 1000000)
#def couldBePointer(p, align):
# type = lookupType("unsigned int")
@@ -667,24 +668,6 @@ def qtNamespace():
except:
return ""
# -- Determine major Qt version by calling qVersion (cached)
qqMajorVersion = None
def qtMajorVersion():
global qqMajorVersion
if not qqMajorVersion is None:
return qqMajorVersion
try:
# -- Result is returned as character, need to subtract '0'
v = int(parseAndEvaluate("*(char*)qVersion()"))
if v >= 51:
qqMajorVersion = v - 48
return qqMajorVersion
return 0
except:
return 0
def findFirstZero(p, maximum):
for i in xrange(maximum):
if p.dereference() == 0:
@@ -762,21 +745,17 @@ def encodeChar4Array(p, maxsize):
return s
def qByteArrayData(value):
if qtMajorVersion() < 5:
d_ptr = value['d'].dereference()
checkRef(d_ptr["ref"])
data = d_ptr['data']
size = d_ptr['size']
alloc = d_ptr['alloc']
return data, size, alloc
else: # Qt5: Implement the QByteArrayData::data() accessor.
qByteArrayData = value['d'].dereference()
size = qByteArrayData['size']
alloc = qByteArrayData['alloc']
private = value['d']
checkRef(private['ref'])
try:
# Qt 5. Will fail on Qt 4 due to the missing 'offset' member.
offset = private['offset']
charPointerType = lookupType('char *')
data = qByteArrayData['d'].cast(charPointerType) \
+ qByteArrayData['offset'] + charPointerType.sizeof
return data, size, alloc
data = private.cast(charPointerType) + private['offset']
return data, int(private['size']), int(private['alloc'])
except:
# Qt 4:
return private['data'], int(private['size']), int(private['alloc'])
def encodeByteArray(value):
data, size, alloc = qByteArrayData(value)
@@ -787,21 +766,23 @@ def encodeByteArray(value):
return encodeCharArray(data, 100, size)
def qQStringData(value):
if qtMajorVersion() < 5:
d_ptr = value['d'].dereference()
checkRef(d_ptr['ref'])
return d_ptr['data'], int(d_ptr['size']), int(d_ptr['alloc'])
else: # Qt5: Implement the QStringArrayData::data() accessor.
qStringData = value['d'].dereference()
private = value['d']
checkRef(private['ref'])
try:
# Qt 5. Will fail on Qt 4 due to the missing 'offset' member.
offset = private['offset']
ushortPointerType = lookupType('ushort *')
data = qStringData['d'].cast(ushortPointerType) \
+ ushortPointerType.sizeof / 2 + qStringData['offset']
return data, int(qStringData['size']), int(qStringData['alloc'])
data = private.cast(ushortPointerType) + offset / 2
return data, int(private['size']), int(private['alloc'])
except:
# Qt 4.
return private['data'], int(private['size']), int(private['alloc'])
def encodeString(value):
data, size, alloc = qQStringData(value)
check(0 <= size and size <= alloc and alloc <= 100*1000*1000)
if alloc != 0:
check(0 <= size and size <= alloc and alloc <= 100*1000*1000)
if size > 0:
checkAccess(data, 4)
checkAccess(data + size) == 0
+16 -10
View File
@@ -1644,23 +1644,29 @@ def qedit__QVector(expr, value):
def qdump__QVector(d, value):
d_ptr = value["d"]
p_ptr = value["p"]
alloc = d_ptr["alloc"]
size = d_ptr["size"]
private = value["d"]
checkRef(private["ref"])
alloc = private["alloc"]
size = private["size"]
innerType = templateArgument(value.type, 0)
charPointerType = lookupType("char *")
try:
# Qt 5. Will fail on Qt 4 due to the missing 'offset' member.
offset = private["offset"]
data = private.cast(charPointerType) + offset
except:
# Qt 4.
data = value["p"]["array"]
p = data.cast(innerType.pointer())
check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
checkRef(d_ptr["ref"])
innerType = templateArgument(value.type, 0)
d.putItemCount(size)
d.putNumChild(size)
if d.isExpanded():
p = gdb.Value(p_ptr["array"]).cast(innerType.pointer())
charPtr = lookupType("char").pointer()
d.putField("size", size)
with Children(d, size, maxNumChild=2000, childType=innerType, addrBase=p,
addrStep=(p+1).cast(charPtr) - p.cast(charPtr)):
addrStep=(p+1).cast(charPointerType) - p.cast(charPointerType)):
for i in d.childRange():
d.putSubItem(i, p.dereference())
p += 1
-1
View File
@@ -1 +0,0 @@
*.patch -crlf
-35
View File
@@ -1,35 +0,0 @@
As baseline, d85391173658dc6dcbf1acc5edbe331b1296f572 (Mon Jun 20 17:53:28)
should be used.
For Mac:
+ gdb-increased-dcache-line-size.patch
For Linux:
+ gdb-increased-dcache-line-size.patch
For MinGW:
+ gdb-increased-dcache-line-size.patch
+ gdb-expand-line-sal-maybe.patch
For Maemo targets:
(--target=arm-none-linux-gnueabi)
+ gdb-increased-dcache-line-size.patch
// Don't use this: + gdb-stepping-for-maemo.patch
For Symbian targets:
(--target=arm-none-symbianelf)
+ gdb-increased-dcache-line-size.patch
+ gdb-work-around-trk-single-step.patch
Experimental for performance (don't apply):
gdb-without-dwarf-name-canonicalization.patch
@@ -1,138 +0,0 @@
This is fixing https://bugreports.qt-project.org/browse/QTCREATORBUG-2004
-----------------------------------------------------------------------------
* From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
* To: gdb-patches at sourceware dot org
* Date: Thu, 29 Jul 2010 00:39:54 +0200
* Subject: [patch] Fix internal error on some -O2 -g breakpoints
Hi,
https://bugzilla.redhat.com/show_bug.cgi?id=612253
(gdb) file ./cc1plus
(gdb) break add_new_name_mapping
../../gdb/breakpoint.c:6594: internal-error: expand_line_sal_maybe: Assertion
`found' failed.
# Test various conditions of prologue analysis on -O2 -g code. Particularly
# when the first command of a function is an inlined function from a different
# symtab. The inlined function can have also multiple concrete instances.
# The next first line after the inlined function should have two PC ranges.
expand_line_sal_maybe processes already too complex data it cannot rely on the
exact input PC would be found between the output resolved results. There are
various bugs I was trying to fix which cause such incorrect multiple results
in this case. But even after fixing all of them the code would be too fragile
to stay relying on this conditional.
After this patch GDB will put the breakpoint only _after_ the initial inlined
call (=incorrectly) in the testcase; it will no longer crash on it, though.
The symtab.c==expand_line_sal change is optional. I believe it is a correct
change but I do not find it much important. With this change GDB will not
only no longer crash but it will even place the breakpoint correctly in the
real world cc1plus testcase from the downstream bug above.
Defining -DLEXICAL still crashes FSF GDB HEAD but just with the
symtab.c==expand_line_sal change it no longer crashes.
Defining -DINLINED crashes FSF GDB HEAD even with the
symtab.c==expand_line_sal change, therefore also
breakpoint.c==expand_line_sal_maybe is patches in this patches.
I can remove the LEXICAL part and keep there only the un-#ifdef-ed INLINED
one if anyone cares about.
<background>
There remain more issues to solve. skip_prologue_sal should be called for
each separate inlined instance (line number alias). It is called now first
and then the other instances are being found... Also skip_prologue_sal should
be able to _decrease_ the PC, not just increase it as it may be needed from
breakpoint_re_set. Just reread_symbols contains bugs causing common GDB
crashes on the reload so I did not try to fix skip_prologue_sal for it now.
Also there is a general problem that GDB now tries to heuristically guess some
expected defects of the debuginfo in -O2 -g cases (see "For optimized code" in
expand_line_sal), it is there because GCC does not generate proper is_stmt
(DW_LNS_negate_stmt). Moreover very magic skip_prologue_sal is there just
because GCC does not generate proper DW_LNS_set_prologue_end markers.
As GCC should produce these markers in a foreseeable future I did not want to
try to do anything with these GDB heuristics.
There remains a question whether the expand_line_sal_maybe patch part should
not possibly use just the first breakpoint if ORIGINAL_PC cannot be found.
I find it safer this way without much disadvantages, multi-PC breakpoints are
very transparent to the user, the other breakpoints are always somehow related
and more breakpoints is always better than less of them, IMO.
</background>
No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
The testcase may not necessarily crash current FSF GDB HEAD on other arches.
Thanks,
Jan
-----------------------------------------------------------------------------
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -7532,7 +7532,6 @@ expand_line_sal_maybe (struct symtab_and_line sal)
struct symtabs_and_lines expanded;
CORE_ADDR original_pc = sal.pc;
char *original_function = NULL;
- int found;
int i;
struct cleanup *old_chain;
@@ -7616,17 +7615,8 @@ expand_line_sal_maybe (struct symtab_and_line sal)
return expanded;
}
- if (original_pc)
- {
- found = 0;
- for (i = 0; i < expanded.nelts; ++i)
- if (expanded.sals[i].pc == original_pc)
- {
- found = 1;
- break;
- }
- gdb_assert (found);
- }
+ /* ORIGINAL_PC may not be found between EXPANDED.SALS. expand_line_sal may
+ have skipped too far. */
return expanded;
}
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4750,11 +4750,20 @@ expand_line_sal (struct symtab_and_line sal)
blocks = alloca (ret.nelts * sizeof (struct block *));
for (i = 0; i < ret.nelts; ++i)
{
+ struct block *bl;
+
set_current_program_space (ret.sals[i].pspace);
- filter[i] = 1;
- blocks[i] = block_for_pc_sect (ret.sals[i].pc, ret.sals[i].section);
+ /* Place breakpoint only to the first PC in a function, even if some of
+ them are in a lexical sub-block. Put it too all the function
+ instances incl. the inlined ones. */
+ bl = block_for_pc_sect (ret.sals[i].pc, ret.sals[i].section);
+ while (bl != NULL && BLOCK_FUNCTION (bl) == NULL)
+ bl = BLOCK_SUPERBLOCK (bl);
+
+ filter[i] = 1;
+ blocks[i] = bl;
}
do_cleanups (old_chain);
@@ -1,13 +0,0 @@
diff --git a/gdb/dcache.c b/gdb/dcache.c
index e1386e0..65b1a02 100644
--- a/gdb/dcache.c
+++ b/gdb/dcache.c
@@ -76,7 +76,7 @@
/* The size of a cache line. Smaller values reduce the time taken to
read a single byte and make the cache more granular, but increase
overhead and reduce the effectiveness of the cache as a prefetcher. */
-#define LINE_SIZE_POWER 6
+#define LINE_SIZE_POWER 8
#define LINE_SIZE (1 << LINE_SIZE_POWER)
/* Each cache block holds LINE_SIZE bytes of data
@@ -1,17 +0,0 @@
NOTE: This relates to http://sourceware.org/bugzilla/show_bug.cgi?id=11497
Not clear whether the patch is needed at all.
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -4627,7 +4627,9 @@ process_event_stop_test:
if (execution_direction != EXEC_REVERSE
&& ecs->event_thread->control.step_over_calls == STEP_OVER_UNDEBUGGABLE
- && in_solib_dynsym_resolve_code (stop_pc))
+ && in_solib_dynsym_resolve_code (stop_pc)
+ && !(ecs->event_thread->step_range_start > 1
+ && in_solib_dynsym_resolve_code (ecs->event_thread->step_range_start)))
{
CORE_ADDR pc_after_resolver =
gdbarch_skip_solib_resolver (gdbarch, stop_pc);
@@ -1,19 +0,0 @@
This shortcuts the canonicalization of symbol names. This is likely to
introduce regressions for setting breakpoints by function names (which
is rarely used by IDE users) but speeds up startup by around 15% for a
typical Qt application. So disabling it seems to be a good compromise.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index a05c946..761fa34 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -12157,7 +12157,7 @@ static char *
dwarf2_canonicalize_name (char *name, struct dwarf2_cu *cu,
struct obstack *obstack)
{
- if (name && cu->language == language_cplus)
+ if (0 && name && cu->language == language_cplus)
{
char *canon_name = cp_canonicalize_string (name);
-15
View File
@@ -92,21 +92,6 @@ Product {
]
}
Group {
qbs.installDir: "share/qtcreator/patches"
fileTags: ["install"]
prefix: "qtcreator/patches/"
files: [
".gitattributes",
"README",
"gdb-expand-line-sal-maybe.patch",
"gdb-increased-dcache-line-size.patch",
"gdb-stepping-for-maemo.patch",
"gdb-without-dwarf-name-canonicalization.patch",
"gdb-work-around-trk-single-step.patch",
]
}
Group {
qbs.installDir: "share/qtcreator/qml-type-descriptions"
fileTags: ["install"]
+1
View File
@@ -543,6 +543,7 @@ QtcLibrary {
}
ProductModule {
Depends { name: "cpp" }
cpp.linkerFlags: {
if (qbs.toolchain === 'mingw') {
return ['--enable-auto-import']
+1
View File
@@ -173,6 +173,7 @@ QtcLibrary {
]
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: [
".",
"../3rdparty",
+1
View File
@@ -28,6 +28,7 @@ QtcLibrary {
]
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: ["."]
}
}
+1
View File
@@ -42,6 +42,7 @@ QtcLibrary {
]
ProductModule {
Depends { name: "cpp" }
Depends { name: "symbianutils" }
cpp.includePaths: [
"."
@@ -60,6 +60,7 @@ QtcLibrary {
]
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: ["."]
}
}
+1
View File
@@ -103,6 +103,7 @@ QtcLibrary {
]
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: [
".",
"parser"
+1
View File
@@ -57,6 +57,7 @@ QtcLibrary {
]
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: [
"../../shared/symbianutils",
"../../shared/json",
+1 -1
View File
@@ -684,7 +684,7 @@ void QtcProcess::start()
prepareCommand(m_command, m_arguments, &command, &arguments, &env, &workDir);
setNativeArguments(arguments);
if (m_useCtrlCStub) {
argList << command;
argList << QDir::toNativeSeparators(command);
command = QCoreApplication::applicationDirPath() + QLatin1String("/qtcreator_ctrlc_stub.exe");
}
QProcess::start(command, argList);
+1 -1
View File
@@ -256,7 +256,7 @@ QtcLibrary {
}
ProductModule {
Depends { name: "Qt"; submodules: ["concurrent"] }
Depends { name: "Qt"; submodules: ["concurrent", "widgets", "network"] }
}
}
+4 -1
View File
@@ -35,5 +35,8 @@ QtcLibrary {
"syssocket.h"
]
ProductModule { cpp.includePaths: "." }
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: "."
}
}
@@ -54,6 +54,7 @@ QtcPlugin {
]
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: [
"."
]
+2 -1
View File
@@ -245,13 +245,14 @@ QtcPlugin {
}
ProductModule {
Depends { name: "cpp" }
Depends { name: "Aggregation" }
Depends { name: "ExtensionSystem" }
Depends { name: "Utils" }
cpp.includePaths: [
"../..",
"../../libs",
buildDirectory + "/.obj/Core/actionmanager"
product.buildDirectory + "/.obj/Core/actionmanager"
]
}
}
+1
View File
@@ -305,6 +305,7 @@ QtcPlugin {
}
ProductModule {
Depends { name: "cpp" }
cpp.includePaths: ["."]
}
}
+1 -1
View File
@@ -521,7 +521,7 @@ static QList<DebuggerEngineType> enginesForToolChain(const Abi &toolChain,
result.push_back(CdbEngineType);
} else {
result.push_back(CdbEngineType);
result.push_back(GdbEngineType);
//result.push_back(GdbEngineType);
}
if (languages & QmlLanguage)
result.push_back(QmlEngineType);
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 291 B

@@ -249,7 +249,7 @@ void ProjectListWidget::addProject(Project *project)
m_ignoreIndexChange = true;
QString sortName = fullName(project);
int pos = 0;
int pos = count();
for (int i=0; i < count(); ++i) {
Project *p = item(i)->data(Qt::UserRole).value<Project*>();
if (projectLesserThan(project, p)) {
@@ -269,6 +269,9 @@ QList<PropertyInfo> getObjectTypes(const ObjectValue *ov, const ContextPtr &cont
if (!local) {
const ObjectValue* prototype = ov->prototype(context);
if (prototype == ov)
return list;
const CppComponentValue * qmlObjectValue = value_cast<CppComponentValue>(prototype);
if (qmlObjectValue) {
+1 -1
View File
@@ -5,7 +5,7 @@ import "../QtcPlugin.qbs" as QtcPlugin
QtcPlugin {
name: "QmlJSEditor"
Depends { name: "qt"; submodules: ['widgets'] }
Depends { name: "qt"; submodules: ['widgets', 'script'] }
Depends { name: "Core" }
Depends { name: "TextEditor" }
Depends { name: "ProjectExplorer" }
@@ -5,7 +5,7 @@ import "../QtcPlugin.qbs" as QtcPlugin
QtcPlugin {
name: "QmlJSInspector"
Depends { name: "qt"; submodules: ['widgets'] }
Depends { name: "qt"; submodules: ['widgets', 'quick1'] }
Depends { name: "Core" }
Depends { name: "Debugger" }
Depends { name: "LanguageUtils" }
@@ -1863,6 +1863,10 @@ void Qt4ProFileNode::applyEvaluate(EvalResult evalResult, bool async)
newVarValues[DefinesVar] = m_readerExact->values(QLatin1String("DEFINES"));
newVarValues[IncludePathVar] = includePaths(m_readerExact);
newVarValues[CppFlagsVar] = m_readerExact->values("QMAKE_CXXFLAGS");
newVarValues[CppHeaderVar] = m_readerExact->absoluteFileValues(QLatin1String("HEADERS"),
m_projectDir,
QStringList() << m_projectDir,
0);
newVarValues[CppSourceVar] = m_readerExact->absoluteFileValues(QLatin1String("SOURCES"),
m_projectDir,
QStringList() << m_projectDir,
+1 -1
View File
@@ -83,6 +83,7 @@ enum Qt4Variable {
DefinesVar = 1,
IncludePathVar,
CppFlagsVar,
CppHeaderVar,
CppSourceVar,
ObjCSourceVar,
UiDirVar,
@@ -117,7 +118,6 @@ using ProjectExplorer::FileType;
namespace Internal {
class Qt4UiCodeModelSupport;
class ProFileReader;
class Qt4PriFile;
struct InternalNode;
}
@@ -545,6 +545,8 @@ void Qt4Project::updateCppCodeModel()
part->cxx11Enabled = tc->compilerFlags(pro->variableValue(CppFlagsVar)) == ToolChain::STD_CXX11;
part->sourceFiles = pro->variableValue(CppSourceVar);
part->sourceFiles += pro->variableValue(CppHeaderVar);
part->sourceFiles.prepend(QLatin1String("<configuration>"));
pinfo.appendProjectPart(part);
allFiles += part->sourceFiles;
+1 -1
View File
@@ -78,7 +78,7 @@ static QString suppressionText(const Error &error)
// we take the last stack frame and append the suppression kind, e.g.:
// QDebug::operator<<(bool) [Memcheck:Cond]
if (!error.stacks().isEmpty() && !error.stacks().first().frames().isEmpty()) {
const Frame &frame = error.stacks().first().frames().first();
const Frame frame = error.stacks().first().frames().first();
QString newName;
if (!frame.functionName().isEmpty())
@@ -582,11 +582,24 @@ namespace qbytearray {
dummyStatement(&buf1, &buf2, &buf3);
}
void testQByteArray4()
{
char data[] = { 'H', 'e', 'l', 'l', 'o' };
QByteArray ba1 = QByteArray::fromRawData(data, 4);
QByteArray ba2 = QByteArray::fromRawData(data + 1, 4);
BREAK_HERE;
// Check ba1 "Hell" QByteArray.
// Check ba2 "ello" QByteArray.
// Continue.
dummyStatement(&ba1, &ba2, &data);
}
void testQByteArray()
{
testQByteArray1();
testQByteArray2();
testQByteArray3();
testQByteArray4();
}
} // namespace qbytearray
@@ -3372,14 +3385,26 @@ namespace qstring {
str += QLatin1Char(0);
str += QLatin1Char(1);
str += " fat ";
str += " World ";
str += " World ";
str += " World";
str.prepend("Prefix: ");
BREAK_HERE;
// Check str "Hello big, \t\r\n\000\001 fat World World " QString.
// Check str "Prefix: Hello big, \t\r\n\000\001 fat World" QString.
// Continue.
dummyStatement(&str);
}
void testQString2()
{
QChar data[] = { 'H', 'e', 'l', 'l', 'o' };
QString str1 = QString::fromRawData(data, 4);
QString str2 = QString::fromRawData(data + 1, 4);
BREAK_HERE;
// Check str1 "Hell" QString.
// Check str2 "ello" QString.
// Continue.
dummyStatement(&str1, &str2, &data);
}
void stringRefTest(const QString &refstring)
{
dummyStatement(&refstring);
@@ -3410,6 +3435,7 @@ namespace qstring {
void testQString()
{
testQString1();
testQString2();
testQString3();
testQStringQuotes();
}
+124 -25
View File
@@ -284,6 +284,113 @@ def __checkParentAccess__(filePath):
# and a list of supported versions as value
def getCorrectlyConfiguredTargets():
result = {}
for tv in iterateQtVersions():
for target,version in tv.iteritems():
# Dialog sometimes differs from targets' names
if target == "Maemo":
target = "Maemo5"
elif target == "Symbian":
target = "Symbian Device"
implicitTargets = [target]
if target == "Desktop" and platform.system() in ("Linux", "Darwin"):
implicitTargets.append("Embedded Linux")
for currentTarget in implicitTargets:
if currentTarget in result:
oldV = result[currentTarget]
if version not in oldV:
oldV.append(version)
result.update({currentTarget:oldV})
else:
result.update({currentTarget:[version]})
test.log("Correctly configured targets: %s" % str(result))
return result
def visibleCheckBoxExists(text):
try:
findObject("{type='QCheckBox' text='%s' visible='1'}" % text)
return True
except:
return False
# this function verifies if the text matches the given
# regex inside expectedTexts
# param text must be a single str/unicode
# param expectedTexts can be str/unicode/list/tuple
def regexVerify(text, expectedTexts):
if isinstance(expectedTexts, (str,unicode)):
expectedTexts = [expectedTexts]
for curr in expectedTexts:
pattern = re.compile(curr)
if pattern.match(text):
return True
return False
def checkDebuggingLibrary(targVersion, targets):
# internal function to execute while iterating Qt versions
def __checkDebugLibsInternalFunc__(target, version, targVersion, targStrings):
built = failed = 0
container = ("container=':qt_tabwidget_stackedwidget.QtSupport__Internal__"
"QtVersionManager_QtSupport::Internal::QtOptionsPageWidget'")
buildLogWindow = ("window={name='QtSupport__Internal__ShowBuildLog' type='QDialog' "
"visible='1' windowTitle?='Debugging Helper Build Log*'}")
if target in targStrings and version == targVersion:
detailsButton = waitForObject("{%s type='Utils::DetailsButton' text='Details' "
"visible='1' unnamed='1'}" % container)
ensureChecked(detailsButton)
gdbHelperStat = waitForObject("{%s type='QLabel' name='gdbHelperStatus' "
"visible='1'}" % container)
if 'Not yet built.' in str(gdbHelperStat.text):
clickButton(waitForObject("{%s type='QPushButton' name='gdbHelperBuildButton' "
"text='Build' visible='1'}" % container))
buildLog = waitForObject("{type='QPlainTextEdit' name='log' visible='1' %s}" % buildLogWindow)
if str(buildLog.plainText).endswith('Build succeeded.'):
built += 1
else:
failed += 1
test.fail("Building GDB Helper failed",
buildLog.plainText)
clickButton(waitForObject("{type='QPushButton' text='Close' unnamed='1' "
"visible='1' %s}" % buildLogWindow))
else:
built += 1
ensureChecked(detailsButton, False)
return (built, failed)
# end of internal function
tv, builtAndFailedList = iterateQtVersions(False, __checkDebugLibsInternalFunc__, targVersion,
QtQuickConstants.getTargetsAsStrings(targets))
built = failed = 0
for current in builtAndFailedList:
if current[0]:
built += current[0]
if current[1]:
failed += current[1]
if failed > 0:
test.fail("%d of %d GDB Helper compilations failed." % (failed, failed+built))
else:
test.passes("%d GDB Helper found compiled or successfully built." % built)
return failed == 0
# function that opens Options Dialog and parses the configured Qt versions
# param keepOptionsOpen set to True if the Options dialog should stay open when
# leaving this function
# param additionalFunction pass a function or name of a defined function to execute
# for each item on the list of Qt versions
# this function must take at least 2 parameters - the first is the target name
# and the second the version of the current selected Qt version item
# param argsForAdditionalFunc you can specify as much parameters as you want to pass
# to additionalFunction from the outside
# the function returns a list of dict holding target-version mappings if used without
# additionalFunction
# WATCH OUT! if you're using the additionalFunction parameter - this function will
# return the list mentioned above as well as the returned value(s) from
# additionalFunction. You MUST call this function like
# result, additionalResult = _iterateQtVersions(...)
# where additionalResult is the result of all executions of additionalFunction which
# means it is a list of results.
def iterateQtVersions(keepOptionsOpen=False, additionalFunction=None, *argsForAdditionalFunc):
result = []
additionalResult = []
invokeMenuItem("Tools", "Options...")
waitForObjectItem(":Options_QListView", "Build & Run")
clickItem(":Options_QListView", "Build & Run", 14, 15, 0, Qt.LeftButton)
@@ -303,29 +410,21 @@ def getCorrectlyConfiguredTargets():
if matches:
target = matches.group("target").strip()
version = matches.group("version").strip()
# Dialog sometimes differs from targets' names
if target == "Maemo":
target = "Maemo5"
elif target == "Symbian":
target = "Symbian Device"
implicitTargets = [target]
if target == "Desktop" and platform.system() in ("Linux", "Darwin"):
implicitTargets.append("Embedded Linux")
for currentTarget in implicitTargets:
if currentTarget in result:
oldV = result[currentTarget]
if version not in oldV:
oldV.append(version)
result.update({currentTarget:oldV})
result.append({target:version})
if additionalFunction:
try:
if isinstance(additionalFunction, (str, unicode)):
currResult = globals()[additionalFunction](target, version, *argsForAdditionalFunc)
else:
result.update({currentTarget:[version]})
clickButton(waitForObject(":Options.Cancel_QPushButton"))
test.log("Correctly configured targets: %s" % str(result))
return result
def visibleCheckBoxExists(text):
try:
findObject("{type='QCheckBox' text='%s' visible='1'}" % text)
return True
except:
return False
currResult = additionalFunction(target, version, *argsForAdditionalFunc)
except:
currResult = None
test.fatal("Function to additionally execute on Options Dialog could not be found or "
"an exception occured while executing it.")
additionalResult.append(currResult)
if not keepOptionsOpen:
clickButton(waitForObject(":Options.Cancel_QPushButton"))
if additionalFunction:
return result, additionalResult
else:
return result