Summary: | KDevelop crashes on start, valgrind shows invalid memory access | ||
---|---|---|---|
Product: | [Unmaintained] kdelibs | Reporter: | Petr Mrázek <peterix> |
Component: | kdecore | Assignee: | kdelibs bugs <kdelibs-bugs> |
Status: | RESOLVED WORKSFORME | ||
Severity: | crash | ||
Priority: | NOR | ||
Version: | SVN | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: |
Valgrind output from successful start
Valgrind output from successful start |
seems to be a kdelibs issue, anyone can tell me what's going on here? Also note that I cannot reproduce the KGlobal::locale::Warning, hence have no idea on how to fix it... It would be very difficult to diagnose what causing the crash (even with the more-helpful Valgrind output) without debugging symbols being available for at least libkdecore.so.5. Most distributions allow you to install these symbols separately with -dbg packages. Valgrind itself seems to indicate that KDevelop is trying to recover an old session, so the reporter might also want to see about clearing out some of the session directories mentioned in the Valgrind output, as long as those sessions weren't holding something useful, and then starting up KDevelop after that is done. OK. I rebuilt kdelibs with debug symbols and have an updated backtrace. I think I also managed to remove all the config files and session data, so the updated valgrind output should be better. GDB: Starting program: /usr/bin/kdevelop [Thread debugging using libthread_db enabled] KGlobal::locale::Warning your global KLocale is being recreated with a valid main component instead of a fake component, this usually means you tried to call i18n related functions before your main component was created. You should not do that since it most likely will not work Program received signal SIGSEGV, Segmentation fault. 0x00007ffff64f32dc in QString::append(QString const&) () from /usr/lib/libQtCore.so.4 (gdb) bt #0 0x00007ffff64f32dc in QString::append(QString const&) () from /usr/lib/libQtCore.so.4 #1 0x00007ffff7af4ae6 in operator+= (languages=..., catalogs=...) at /usr/include/QtCore/qstring.h:281 #2 operator+ (languages=..., catalogs=...) at /usr/include/QtCore/qstring.h:1024 #3 KLocalizedStringPrivate::notifyCatalogsUpdated (languages=..., catalogs=...) at /home/peterix/kdelibs/src/kdelibs-4.5.95/kdecore/localization/klocalizedstring.cpp:998 #4 0x00007ffff7aec071 in KLocalePrivate::updateCatalogs (this=0x687810) at /home/peterix/kdelibs/src/kdelibs-4.5.95/kdecore/localization/klocale_kde.cpp:846 #5 0x00007ffff7aeb621 in KLocalePrivate::setActiveCatalog (this=0x687810, catalog=<value optimized out>) at /home/peterix/kdelibs/src/kdelibs-4.5.95/kdecore/localization/klocale_kde.cpp:875 #6 0x00007ffff7a5ff13 in KGlobal::setActiveComponent (c=...) at /home/peterix/kdelibs/src/kdelibs-4.5.95/kdecore/kernel/kglobal.cpp:232 #7 0x00007ffff7a62273 in KComponentData::KComponentData (this=0x707f98, aboutData=0x7fffffffe140, registerAsMain=KComponentData::RegisterAsMainComponent) at /home/peterix/kdelibs/src/kdelibs-4.5.95/kdecore/kernel/kcomponentdata.cpp:101 #8 0x00007ffff6d82399 in KApplicationPrivate (this=0x7fffffffc580, GUIenabled=true) at /home/peterix/kdelibs/src/kdelibs-4.5.95/kdeui/kernel/kapplication.cpp:191 #9 KApplication::KApplication (this=0x7fffffffc580, GUIenabled=true) at /home/peterix/kdelibs/src/kdelibs-4.5.95/kdeui/kernel/kapplication.cpp:346 #10 0x00000000004082b2 in KDevelopApplication (argc=<value optimized out>, argv=0x7fffffffe478) at /home/peterix/kdevelop-git/src/kdevelop/app/main.cpp:76 #11 main (argc=<value optimized out>, argv=0x7fffffffe478) at /home/peterix/kdevelop-git/src/kdevelop/app/main.cpp:210 Created attachment 55706 [details]
Valgrind output from successful start
This time without user settings/sessions present.
OK, found out what's happening. A long time ago, KDE had the Kiosk framework, which allowed admins to set up some unchangeable KDE settings for users/groups. It's deeply integrated into the application startup. Loading configuration into KConfig, KGlobal, KStandardDirs and the like. It's mostly unused and badly maintained and my guess is that somewhere between KDE 4.5 and KDE 4.6, it got broken even more than it already was. KDevelop is for some reason different enough from the usual KDE apps. Maybe it's the lock used in main(). I had many problems with Kiosk and the order in which things are initialized during application startup before. So, it's a kdelibs bug in KStandardDirs and possibly other related classes, because this didn't happen with KDE 4.5. This is the strace output right before the crash that gave it away: lstat("/usr", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/usr/share", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0 lstat("/usr/share/locale", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/home/peterix", {st_mode=S_IFDIR|0700, st_size=45056, ...}) = 0 lstat("/home/peterix/.kde4", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 lstat("/home/peterix/.kde4/share", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 lstat("/home/peterix/.kde4/share/locale", 0x7fffce9f7650) = -1 ENOENT (No such file or directory) access("/home/peterix/.kde4/share/locale/", R_OK) = -1 ENOENT (No such file or directory) access("/home/peterix/.kde4/share/", R_OK) = 0 stat("/home/peterix/.kde4/share/", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/home/peterix", {st_mode=S_IFDIR|0700, st_size=45056, ...}) = 0 lstat("/home/peterix/.kde4", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 lstat("/home/peterix/.kde4/share", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 lstat("/etc", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0 lstat("/etc/kde-profile", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/etc/kde-profile/profile1", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/etc/kde-profile/profile1/share", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/etc/kde-profile/profile1/share/locale", 0x7fffce9f7650) = -1 ENOENT (No such file or directory) access("/etc/kde-profile/profile1/share/locale/", R_OK) = -1 ENOENT (No such file or directory) access("/etc/kde-profile/profile1/share/", R_OK) = 0 stat("/etc/kde-profile/profile1/share/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/etc", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0 lstat("/etc/kde-profile", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/etc/kde-profile/profile1", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 lstat("/etc/kde-profile/profile1/share", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 stat("/etc/kde-profile/profile1/share/locale", 0x116fc68) = -1 ENOENT (No such file or directory) lstat("/etc/kde-profile/profile1/share/locale", 0x7fffce9f86d0) = -1 ENOENT (No such file or directory) stat("/usr/share/locale", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 access("/home/peterix/.kde4/share/locale/en_US/LC_SCRIPTS/kdecalendarsystems/kdecalendarsystems.js", R_OK) = -1 ENOENT (No such file or directory) access("/usr/share/locale/en_US/LC_SCRIPTS/kdecalendarsystems/kdecalendarsystems.js", R_OK) = -1 ENOENT (No such file or directory) --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++ Segmentation fault According to valgrind, problems start with KStandardDirs::addCustomized and KStandardDirs::lookupProfiles. Way to replicate the valgrind output: 1. Create files named /etc/kde4rc and /etc/kde-user-profile. /etc/kde4rc should contain this: [Directories] userProfileMapFile=/etc/kde-user-profile Alternatively, you can use the KioskTool application from KDE playground to set up proper Kiosk profiles. 2. Run kdevelop and watch the fireworks. Dear Bug Submitter, This bug has been stagnant for a long time. Could you help us out and re-test if the bug is valid in the latest version? I am setting the status to NEEDSINFO pending your response, please change the Status back to REPORTED when you respond. Thank you for helping us make KDE software even better for everyone! Dear Bug Submitter, This bug has been in NEEDSINFO status with no change for at least 15 days. Please provide the requested information as soon as possible and set the bug status as REPORTED. Due to regular bug tracker maintenance, if the bug is still in NEEDSINFO status with no change in 30 days the bug will be closed as RESOLVED > WORKSFORME due to lack of needed information. For more information about our bug triaging procedures please read the wiki located here: https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging If you have already provided the requested information, please mark the bug as REPORTED so that the KDE team knows that the bug is ready to be confirmed. Thank you for helping us make KDE software even better for everyone! I barely remember this and I don't think it is relevant anymore. Anyway, for reference: https://userbase.kde.org/KDE_System_Administration/Kiosk/Introduction#Introduction ``` Once the reader understands how the Kiosk framework actually works through KDE's configuration files, we will discuss the Kiosk Admin Tool for those that prefer a GUI interface. This tool also allows administrators to more easily set-up Kiosk profiles and assign them system wide, per-user or per-group. ``` The tool is most likely dead. I tried to get it into some sort of decent shape around the time I reported this. I suspect that since then, the buggy parts (support for Kiosk profiles in KStandardDirs, along with KStandardDirs) just got ripped out. The above linked article also probably needs to be fact-checked. Dear Bug Submitter, This bug has been in NEEDSINFO status with no change for at least 15 days. Please provide the requested information as soon as possible and set the bug status as REPORTED. Due to regular bug tracker maintenance, if the bug is still in NEEDSINFO status with no change in 30 days the bug will be closed as RESOLVED > WORKSFORME due to lack of needed information. For more information about our bug triaging procedures please read the wiki located here: https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging If you have already provided the requested information, please mark the bug as REPORTED so that the KDE team knows that the bug is ready to be confirmed. Thank you for helping us make KDE software even better for everyone! |
Created attachment 55633 [details] Valgrind output from successful start Version: SVN (using KDE 4.5.90) OS: Linux The code was checked out from kdevelop git, master branch. Seems to be some kind of memory corruption issue, see attached valgrind and gdb outputs. The gdb output is from a run where it crashed, the valgrind output is from one where kdevelop managed to survive. This is with KDE 4.6 RC1 packages from kde-unstable Arch Linux repository. Reproducible: Sometimes Steps to Reproduce: Run kdevelop. gdb output: Starting program: /usr/bin/kdevelop [Thread debugging using libthread_db enabled] KGlobal::locale::Warning your global KLocale is being recreated with a valid main component instead of a fake component, this usually means you tried to call i18n related functions before your main component was created. You should not do that since it most likely will not work Program received signal SIGSEGV, Segmentation fault. 0x00007ffff391b2fa in QString::append(QString const&) () from /usr/lib/libQtCore.so.4 (gdb) bt #0 0x00007ffff391b2fa in QString::append(QString const&) () from /usr/lib/libQtCore.so.4 #1 0x00007ffff7af4ae6 in ?? () from /usr/lib/libkdecore.so.5 #2 0x00007ffff7aec071 in ?? () from /usr/lib/libkdecore.so.5 #3 0x00007ffff7aeb621 in ?? () from /usr/lib/libkdecore.so.5 #4 0x00007ffff7a5ff13 in KGlobal::setActiveComponent(KComponentData const&) () from /usr/lib/libkdecore.so.5 #5 0x00007ffff7a62273 in KComponentData::KComponentData(KAboutData const*, KComponentData::MainComponentRegistration) () from /usr/lib/libkdecore.so.5 #6 0x00007ffff41aa399 in KApplication::KApplication(bool) () from /usr/lib/libkdeui.so.5 #7 0x000000000040892a in KDevelopApplication (argc=<value optimized out>, argv=0x7fffffffe478) at /tmp/yaourt-tmp-peterix/aur-kdevelop-git/src/kdevelop/app/main.cpp:76 #8 main (argc=<value optimized out>, argv=0x7fffffffe478) at /tmp/yaourt-tmp-peterix/aur-kdevelop-git/src/kdevelop/app/main.cpp:210