Created attachment 56159 [details] crash file from crash assistang Version: SVN (using KDE 4.5.5) OS: Linux I have a big project using PHP loaded into Kdevelop. Reproducible: Always Steps to Reproduce: Start kdevelop. It loads the last active project and crashes after some time Actual Results: it crashes Expected Results: it should run and parse the project sources
Created attachment 56160 [details] The ebuilds i used to compile kdev from git sources
Created attachment 56161 [details] the last parsed file according to the stdout
Created attachment 56162 [details] the last lines of the stdout describing the crash
the crash is in the PHP plugin, you attached a HTML file that gets parsed from the CSS plugin. Either provide more stdout + the last php file or the full project. Or install more debug infos so I can find out where it actually cases in the type builder. Also please paste backtraces etc. pp. instead of attaching them in the future.
(In reply to comment #4) > the crash is in the PHP plugin, you attached a HTML file that gets parsed from > the CSS plugin. The output doesn't look like this to me. But if you are sure that the cause is the php plugin ... > Either provide more stdout + the last php file or the full project. Or install > more debug infos so I can find out where it actually cases in the type > builder. The whole project has more than one million LOC and is proprietary, therefore i can't supply its sources here. If you could tell me how to make the debug output from the php plugin more verbose that I can see which file causes the error I could supply the code that causes the crash. Up to know, I get some "Error: expected symbol" messages with a token and a line offset BUT no filename. Thus I can't upload the code snippet which causes this crash. > Also please paste backtraces etc. pp. instead of attaching them in the future. I got used to the demand that thias should be attached to a ticket, but i will paste it here in the futue...
search for [KCrash Handler] in your backtrace and you'll see that it crashes in php. Anyways, just show more lines of the stdout, it should also contain something like "kdevelop(9043)/php support Php::ParseJob::run: parsing URL", the last file(s) it talks about is what I need. Or - as I said - more debug symbols. Ask the gentoo/portage/emerge guys on how to compile in debugfull mode. Maybe just change the cmake-invokation to add this.
After recompiling with debug enabled and some trace i think i found the reason for the crash: <?php use \Name\Space\Class as SpecialClass; ?> with a leading \ while using "use NS" lets kdevelop crash. milian confirmed the behaviour in the irc channel.
I'll hope to fix that later today
commit 73042f2d574641f76f1ebcb87a54c457b6a72d00 branch 1.2 Author: Milian Wolff <mail@milianw.de> Date: Tue Jan 18 20:12:29 2011 +0100 prevent explicitlyGlobal import identifiers for namespace alias declaration, fixes assert BUG: 263532 diff --git a/duchain/builders/declarationbuilder.cpp b/duchain/builders/declarationbuilder.cpp index aae6073..6f5c0a4 100644 --- a/duchain/builders/declarationbuilder.cpp +++ b/duchain/builders/declarationbuilder.cpp @@ -1158,7 +1158,10 @@ void DeclarationBuilder::visitUseNamespace(UseNamespaceAst* node) m_editor->findRange(idNode)); { ///TODO: case insensitive! - decl->setImportIdentifier( identifierForNamespace(node->identifier, m_editor) ); + QualifiedIdentifier qid = identifierForNamespace(node->identifier, m_editor); + ///TODO: find out why this must be done (see mail to kdevelop-devel on jan 18th 2011) + qid.setExplicitlyGlobal( false ); + decl->setImportIdentifier( qid ); decl->setPrettyName( id.first ); decl->setKind(Declaration::NamespaceAlias); } diff --git a/duchain/tests/duchain.cpp b/duchain/tests/duchain.cpp index b3b9903..c83a65d 100644 --- a/duchain/tests/duchain.cpp +++ b/duchain/tests/duchain.cpp @@ -2405,13 +2405,14 @@ void TestDUChain::useNamespace() "}\n" "namespace {\n" "use ns1\\ns2, ns3\\ns4 as ns5;\n" + "use \\ns3\\ns4 as ns6;\n" "}\n" , DumpNone); QVERIFY(top); DUChainReleaser releaseTop(top); DUChainWriteLocker lock; - QCOMPARE(top->localDeclarations().count(), 4); + QCOMPARE(top->localDeclarations().count(), 5); Declaration* dec = top->localDeclarations().at(2); QCOMPARE(dec->qualifiedIdentifier().toString(), QString("ns2")); @@ -2420,6 +2421,12 @@ void TestDUChain::useNamespace() dec = top->localDeclarations().at(3); QCOMPARE(dec->qualifiedIdentifier().toString(), QString("ns5")); QVERIFY(dynamic_cast<NamespaceAliasDeclaration*>(dec)); + + dec = top->localDeclarations().at(4); + QCOMPARE(dec->qualifiedIdentifier().toString(), QString("ns6")); + QVERIFY(dynamic_cast<NamespaceAliasDeclaration*>(dec)); + ///TODO: find out why this is explictly required + QVERIFY(!dynamic_cast<NamespaceAliasDeclaration*>(dec)->importIdentifier().explicitlyGlobal()); } struct TestUse {