libvibrant / vibrantLinux

A tool to automate managing your screen's saturation depending on what programs are running
GNU General Public License v3.0
133 stars 7 forks source link

Error when installing from AUR #19

Closed maxfrei750 closed 4 years ago

maxfrei750 commented 4 years ago

First and foremost: Thanks for your awesome work!

When cloning and compiling the repo via git and the instructions in the readme, everything works fine. However, when I install via AUR and try to start the application afterwards, I get:

terminate called after throwing an instance of 'std::runtime_error'
  what():  invalid string
Aborted (core dumped)

I tried to google the message, but it seems to be quite generic. Also, I'm on Manjaro, if that helps. Obviously, I'd be grateful for any help.

guihkx commented 4 years ago

Did you try both vibrantlinux and vibrantlinux-git from the AUR?

maxfrei750 commented 4 years ago

Wow! Quick response. I actually tried both and got the same error for both of them.

guihkx commented 4 years ago

That's odd, I just re-compiled the vibrantlinux version and it worked just fine here. But since I'm on Arch and not Manjaro, this could be specific to Manjaro, I guess...

Is it instantly crashing for you? Not even the main window shows up when you launch it?

I'd try re-compiling vibrantLinux with debug symbols and then run it on gdb, to maybe understand what is happening. Are you familiar with that, at all?

maxfrei750 commented 4 years ago

Is it instantly crashing for you? Not even the main window shows up when you launch it?

Yes, nothing shows up.

Are you familiar with that, at all?

Unfortunately, not in the least. I'm afraid I will be of no big help.

guihkx commented 4 years ago

Well, here's a quick how-to if you want to give it a try:

  1. Clone the AUR repo of vibrantlinux-git:

    git clone https://aur.archlinux.org/vibrantlinux-git.git
    cd vibrantlinux-git
  2. Change the PKGBUILD file to not strip debugging symbols:

    sed -i PKGBUILD -e '14ioptions=(debug !strip)' -e 's/qmake/qmake CONFIG+=debug/'
  3. Run makepkg to download, compile and install Vibrant Linux after building it:

    makepkg -Cis
  4. Run vibrantLinux on gdb:

    gdb -q --args vibrantLinux
  5. You'll see an output similar to this:

    Reading symbols from vibrantLinux...
    (gdb) 
  6. Then type r and hit enter, you should get a similar output:

    (gdb) r
    Starting program: /usr/bin/vibrantLinux 
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib/libthread_db.so.1".
    [New Thread 0x7ffff360f700 (LWP 50900)]
    [New Thread 0x7ffff1d87700 (LWP 50902)]
    [New Thread 0x7ffff1586700 (LWP 50903)]
    [New Thread 0x7ffff0d85700 (LWP 50904)]
    [New Thread 0x7fffe3fff700 (LWP 50905)]
    [New Thread 0x7fffe358c700 (LWP 50906)]
    [New Thread 0x7fffe2d8b700 (LWP 50907)]
    [New Thread 0x7fffe258a700 (LWP 50908)]
    [New Thread 0x7fffe1d89700 (LWP 50909)]
    Thread 1 "vibrantLinux" received signal SIGABRT, Aborted.
    0x00007ffff668305f in poll () from /usr/lib/libc.so.6
  7. Type bt and hit enter, you should get something like this:

    (gdb) bt
    #0  0x00007ffff668305f in poll () at /usr/lib/libc.so.6
    #1  0x00007ffff5c72f38 in  () at /usr/lib/libglib-2.0.so.0
    #2  0x00007ffff5c24221 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
    #3  0x00007ffff6e46211 in 
    QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at 
    /usr/lib/libQt5Core.so.5
    #4  0x00007ffff6dec01c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at 
    /usr/lib/libQt5Core.so.5
    #5  0x00007ffff6df44a4 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
    #6  0x0000555555563ed7 in main(int, char**) (argc=1, argv=0x7fffffffe238) at src/main.cpp:41
  8. That's the info that might help us identify what the problem is, so copy it.

  9. To quit gdb, just type q and hit enter:

    (gdb) q
maxfrei750 commented 4 years ago

Ok, that was easy enough :-)

Reading symbols from vibrantLinux...
(gdb) r
Starting program: /usr/bin/vibrantLinux 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7ffff3599700 (LWP 8314)]
[New Thread 0x7ffff09f2700 (LWP 8324)]
[New Thread 0x7fffeaa74700 (LWP 8325)]
[New Thread 0x7fffea273700 (LWP 8326)]
[New Thread 0x7fffe9a72700 (LWP 8327)]
[New Thread 0x7fffe9271700 (LWP 8328)]
[New Thread 0x7fffe8a70700 (LWP 8329)]
[New Thread 0x7fffcffff700 (LWP 8330)]
[New Thread 0x7fffcf7fe700 (LWP 8331)]
[New Thread 0x7fffceffd700 (LWP 8332)]
terminate called after throwing an instance of 'std::runtime_error'
  what():  invalid string

Thread 1 "vibrantLinux" received signal SIGABRT, Aborted.
0x00007ffff65a8355 in raise () from /usr/lib/libc.so.6
(gdb) bt
#0  0x00007ffff65a8355 in raise () from /usr/lib/libc.so.6
#1  0x00007ffff6591853 in abort () from /usr/lib/libc.so.6
#2  0x00007ffff692a86a in __gnu_cxx::__verbose_terminate_handler ()
    at /build/gcc/src/gcc/libstdc++-v3/libsupc++/vterminate.cc:95
#3  0x00007ffff6936d8a in __cxxabiv1::__terminate (handler=<optimized out>)
    at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_terminate.cc:48
#4  0x00007ffff6936df7 in std::terminate () at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_terminate.cc:58
#5  0x00007ffff693709e in __cxxabiv1::__cxa_throw (obj=<optimized out>, 
    tinfo=0x7ffff6a63280 <typeinfo for std::runtime_error>, 
    dest=0x7ffff694cfd0 <std::runtime_error::~runtime_error()>)
    at /build/gcc/src/gcc/libstdc++-v3/libsupc++/eh_throw.cc:95
#6  0x0000555555569f5c in programInfo::stringToEntryType (string=...) at include/programinfo.h:84
#7  0x0000555555566581 in mainWindow::setupFromConfig (this=0x7fffffffd580) at src/mainwindow.cpp:194
#8  0x0000555555564d4b in mainWindow::mainWindow (this=0x7fffffffd580, parent=0x0) at src/mainwindow.cpp:21
#9  0x0000555555563e5b in main (argc=1, argv=0x7fffffffd8e8) at src/main.cpp:32
(gdb) 
guihkx commented 4 years ago

I'm not one of the developers, but I'm guessing that Vibrant Linux is having issues reading your config file. Can you post it here? It's located in: ~/.config/vibrantLinux/vibrantLinux.internal.

Additionally, you can try moving that file elsewhere and try running Vibrant Linux again to see if it crashes:

$ cd ~/.config/vibrantLinux/
$ mv vibrantLinux.internal vibrantLinux.internal.bak
$ vibrantLinux
maxfrei750 commented 4 years ago

The config file is pretty default, I guess:

{
    "displays": [
        {
            "name": "HDMI-0",
            "vibrance": 0
        },
        {
            "name": "DP-0",
            "vibrance": 0
        }
    ],
    "programs": [
        {
            "path": "/games/steam_linux/steamapps/common/Counter-Strike Global Offensive/csgo_linux64",
            "vibrance": [
                {
                    "name": "HDMI-0",
                    "vibrance": 0
                },
                {
                    "name": "DP-0",
                    "vibrance": 1023
                }
            ]
        }
    ]
}

Additionally, you can try moving that file elsewhere and try running Vibrant Linux again

That did the trick! Apparently, vibrantLinux did not like that the config already existed (because I had it installed based on the github repo before).

Thank you very much!

guihkx commented 4 years ago

Awesome. :)

May I suggest you to leave this issue open, at least until @zee-mzha takes a look at it?

Because, IIRC, even though you were using an old config file, newer versions of Vibrant Linux should convert them automatically to the new format, I guess.

Scrumplex commented 4 years ago

I think there should be some handling of incompatible config files. Currently we assume, that the configuration is compatible. We should probably check whether the config version is valid and if not prompt the user to delete the config. See currently unused config property in setupFromConfig function.

nahla-nee commented 4 years ago

hey sorry for the delayed response! I'm taking quite a loaded summer semester and I've barely had anytime to work on anything else.

Unfortunately since previous config version didn't have anything to tag them It'd be a it annoying to write code to recognize which of them it was. For now the program will crash on any config version that is not current, and inform the user that they should delete their config. In the future as different config version are added they will be tagged with what version they are and I will add functions to take care of converting old version to new.