[英]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.