簡體   English   中英

從 gdb 運行時,GTK3 應用程序不顯示 window

[英]GTK3 application doesn't show window when run from gdb

我正在嘗試使用 gdb 命令調試我的 GTK3 應用程序,但我似乎無法讓它工作。 當我運行命令gdb./myapp時,它會成功加載所有調試符號。 但是,當我隨后在 gdb 中調用run命令時,應用程序 window 沒有打開,並顯示如下:

Starting program: /home/user/build/GTKapp/myapp
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffe3fff6c0 (LWP 146369)]
[New Thread 0x7fffe37fe6c0 (LWP 146370)]
[New Thread 0x7fffdaffd6c0 (LWP 146371)]
[New Thread 0x7fffca3ff6c0 (LWP 146372)]
[New Thread 0x7fffc9bfe6c0 (LWP 146373)]
[New Thread 0x7fffc93fd6c0 (LWP 146374)]
[Thread 0x7fffc93fd6c0 (LWP 146374) exited]
[New Thread 0x7fffc93fd6c0 (LWP 146375)]
[New Thread 0x7fffbbfff6c0 (LWP 146376)]
[Thread 0x7fffc93fd6c0 (LWP 146375) exited]
[New Thread 0x7fffc93fd6c0 (LWP 146377)]
[New Thread 0x7fffbb7fe6c0 (LWP 146378)]
[Thread 0x7fffc93fd6c0 (LWP 146377) exited]
[Thread 0x7fffbbfff6c0 (LWP 146376) exited]
[Thread 0x7fffbb7fe6c0 (LWP 146378) exited]
[New Thread 0x7fffbb7fe6c0 (LWP 146379)]
[New Thread 0x7fffbbfff6c0 (LWP 146380)]
[New Thread 0x7fffc93fd6c0 (LWP 146381)]
[New Thread 0x7fffbaffd6c0 (LWP 146384)]
[New Thread 0x7fffba7fc6c0 (LWP 146385)]
[New Thread 0x7fffb9ffb6c0 (LWP 146386)]
[New Thread 0x7fffb97fa6c0 (LWP 146387)]
[New Thread 0x7fffb8ff96c0 (LWP 146388)]
[Thread 0x7fffba7fc6c0 (LWP 146385) exited]
[Thread 0x7fffbaffd6c0 (LWP 146384) exited]
[Thread 0x7fffc93fd6c0 (LWP 146381) exited]
[Thread 0x7fffbbfff6c0 (LWP 146380) exited]
[Thread 0x7fffbb7fe6c0 (LWP 146379) exited]

如果我在沒有調試器的情況下運行應用程序 window,它可以正常打開,我可以預先運行該應用程序,然后將 gdb 附加到它,但如果我可以從 gdb 內部啟動該應用程序,那就太好了。

這是我用來啟動應用程序的代碼

int main(int argc, char **argv) 
{
    auto app = Gtk::Application::create(argc, argv, APPID);
    
    Glib::MainContext::get_default()->push_thread_default();

    System system(argc, argv);
    
    return app->run(system.getWindow() );
}

如果我可以從 gdb 內部啟動應用程序就好了

應用程序在 GDB 的“內部”與“外部”表現不同的常見原因是環境不同——GDB 調用新的 shell,如果你的~/.bashrc重置環境,它可能與“外部”不同環境而不是應用程序的喜好。

您可以使用以下方法比較“內部與外部”:

env > /tmp/env-outside
gdb -q -ex 'shell env > /tmp/env-inside' -ex quit
diff /tmp/env-{outside,inside}

或者,在_exit上設置斷點並exit並使用 GDB where命令查看應用程序退出的位置。 退出堆棧可能會提供一些關於正在發生的事情的線索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM