[英]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/5155476和https://stackoverflow.com/a/42721326/5155476 。 前者允許您在運行GDB時指定要跳過的目錄(和所有子目錄)(因此您可以隨時更改集),但它需要您構建GDB。 后者允許相同的功能,但在運行GDB之前預先設置,並且不需要構建GDB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.