簡體   English   中英

如何在使用gdb的Qt Creator中調試時避免輸入庫的源文件?

[英]How to avoid entering library's source files while debugging in Qt Creator with gdb?

如何配置Qt Creator和/或gdb,以便在使用Qt庫調試程序時調試器可以避免插入Qt的源文件?

您需要關閉auto-solib-add。 從普通的gdb提示符中鍵入:

(gdb) set auto-solib-add off

在Qt Creator中,在Options-> Debugger-> Gdb下,您可以指定Gdb啟動腳本。 在其中創建一個帶有“set auto-solib-add off”命令的文件,然后將Gdb啟動腳本設置為該文件。

您想要的功能(如RPG所述)無法從GDB ,如果實施,恕我直言將很難使用。

GDB提出了一種類似但更簡單的fstep功能。 鑒於:

foo((string("Hello") + string(" World!)).c_str());

fstep將跳過當前行上的所有調用,除了最后一個調用(因此跳過字符串構造函數, operator+()c_str() ,並僅跳轉到foo )。

這還沒有實現,但可能會在幾個月內實現(這對C++調試非常有用)。

同時,您可以通過設置臨時斷點來近似該功能:

(gdb) list
1       #include <string>
2       #include <iostream>
3       using namespace std;
4
5       void foo(const char *s)
6       {
7         cout << s << endl;
8       }
9
10      int main()
11      {
12        foo((string("Hello") + string(" World!")).c_str());
13        return 0;
14      }
(gdb) b main
Breakpoint 2 at 0x8048901: file t.cc, line 12.
(gdb) run

Breakpoint 1, main () at t.cc:12
12        foo((string("Hello") + string(" World!")).c_str());
(gdb) tb foo
Breakpoint 3 at 0x80488ca: file t.cc, line 7.
(gdb) c
foo (s=0x804a1f4 "Hello World!") at t.cc:7
7         cout << s << endl;
(gdb) q

評論澄清后更新:

在gdb中,您可以指定搜索哪些源目錄 - 如果找不到它們,它將無法進入它們。

要讓gdb輸入qt庫的源文件,它必須知道它們在哪里 - 很可能qt-creator在啟動調試器時告訴gdb它們在哪里。 查看qt-creator以獲取gdb啟動腳本 - 它們可能在那里指定。

如果它們未在啟動腳本中指定,並且它是gdb自己查找源文件,則應該能夠修改gdb啟動腳本以使用directory命令清除任何目錄(請參閱上面的鏈接以獲取語法等)

您也可以通過轉到“Debug - > Views - > Gdb”來查看gdb控制台,以獲取有關當前使用gdb中的show directories命令當前使用的源目錄的信息,並在需要時手動清除任何源目錄。根據具體情況這樣做。

也許這不是這個問題的完美解決方案,但也許它有助於排除項目不在的目錄(即第三方庫,系統頭文件(如STL)等)。 如果是這樣,請查看https://stackoverflow.com/a/31629136/5155476https://stackoverflow.com/a/42721326/5155476 前者允許您在運行GDB時指定要跳過的目錄(和所有子目錄)(因此您可以隨時更改集),但它需要您構建GDB。 后者允許相同的功能,但在運行GDB之前預先設置,並且不需要構建GDB。

暫無
暫無

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

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