Qt 萬能的Debug大神

2021-05-27 17:23:24 字數 3645 閱讀 7512

剛學習qt不久。最近學習了幾個簡單的例項,於是想實現網路通訊,在gui下,對一些大牛來說很簡單了,別笑我哦,

廢話不說了,程式遇到了問題。

經過幾次編譯(一直有錯誤

執行。出現了segment fault.

麻煩了,一直沒有除錯過qt的,emacs下編譯的咋除錯涅,裝了qt-creator.設定斷點,debug。如圖

把彙編貼出來

0x003b5053     mov    %es,(%eax)

0x003b5055 add %al,(%eax)

0x003b5057 mov 0x8(%ebp),%eax

0x003b505a mov 0xc(%ebp),%esi

0x003b505d mov %eax,(%esp)

0x003b5060 call 0x3b2c10 <_znk7qlayout12parentwidgetev>

0x003b5065 mov %eax,%ecx

0x003b5067 mov 0x4(%esi),%eax //程式是在這裡,有個黃色的箭頭,說實話看不太懂,

0x003b506a mov 0x8(%eax),%edi

0x003b506d test %edi,%edi

0x003b506f je 0x3b51b0 <_zn7qlayout14addchildwidgetep7qwidget>

0x003b5075 mov 0x10(%esi),%eax

0x003b5078 cmpb $0x0,0x4(%eax)

0x003b507c js 0x3b51e0 <_zn7qlayout14addchildwidgetep7qwidget>

0x003b5082 test %ecx,%ecx

0x003b5084 setne %dl

0x003b5087 je 0x3b51b5 <_zn7qlayout14addchildwidgetep7qwidget>

0x003b508d cmp %edi,%ecx

0x003b508f mov $0x1,%edx

0x003b5094 setne %al

0x003b5097 movzbl %al,%edi

0x003b509a sub $0x1,%edi

0x003b509d and %ecx,%edi

0x003b509f mov 0x10(%ecx),%eax

0x003b50a2 cmpw $0x0,0x4(%eax)

0x003b50a7 js 0x3b5228 <_zn7qlayout14addchildwidgetep7qwidget>

0x003b50ad movb $0x0,-0x19(%ebp)

0x003b50b1 test %edi,%edi

0x003b50b3 je 0x3b5208 <_zn7qlayout14addchildwidgetep7qwidget>

0x003b50b9 movl $0x1,0x8(%esp)

0x003b50c1 movl $0x7,0x4(%esp)

0x003b50c9 mov %esi,(%esp)

不過仔細分析下,看看裡面的js  ,je call 就知道是一些布局函式的呼叫了,恩,再在main函式中加上多設幾個斷點程式就確定是在這個類中。

類最先呼叫的是建構函式,進入建構函式吧,set breakpoint ,還是直接跳段錯誤。(是不是不能跟蹤到建構函式?)

圖形化除錯工具就在這裡了。

到論壇提問了,只有單執行緒姐回我的帖子

改用我的c法寶吧,printf,沒輸出阿。。。仔細回想以前見過qdebug不過當時不知道什麼意思,baidu了,ok,就用它試試,成功了,哈哈。可以輸出內容。

接下來就找到了問題的根結:是標頭檔案中宣告的變數,在原始檔中沒有例項化!

抓住機會學習下qdebug相關知識。

對於qdebug是用來除錯資訊提示的,輸出到控制台。還有其他的函式qwarning(),qfatal(),等

下面的例子是把除錯資訊輸出到檔案的例子(不過要自己實現訊息控制代碼並註冊事件,不是特別熟悉)

#include #include #include void custommessagehandler(qtmsgtype type, const char *msg)

qfile outfile("debuglog.txt");

qtextstream ts(&outfile);

ts << txt << endl;}

int main( int argc, char * argv )

順便看了下qdebug.h原始碼,裡面內容繁雜,用到了模板,主要的是運算子過載,畢竟要轉化輸出到控制台嘛。

inline qdebug &operator<

096 inline qdebug &operator<

097 inline qdebug &operator<

098 inline qdebug &operator<

099 inline qdebug &operator<

100 inline qdebug &operator<

101 inline qdebug &operator<

102 inline qdebug &operator<

103 inline qdebug &operator<

104 inline qdebug &operator<

105 inline qdebug &operator<

106

107 inline qdebug &operator<

108

109 inline qdebug &operator<

110 inline qdebug &operator<

111 inline qdebug &operator<

112 inline qdebug &operator<

113 inline qdebug &operator<

114 inline qdebug &operator<

115 inline qdebug &operator<

116 inline qdebug &operator<

117 inline qdebug &operator<

118 stream->ts << f;

是問題就有解決方法,不管你信不信,我是信了。當然世界難題就算了,qdebug好東西。明天我的暑期實習就結束了,goodbye ,my last summer holiday.

new world, just like  one piece,哈哈

萬能密碼 php,PHP萬能密碼

說實話如果乙個 的前台都是注入漏洞,那麼憑經驗,萬能密碼進後台的機率基本上是百分之百。可是有的人說對php的站如果是gpc魔術轉換開啟,就會對特殊符號轉義,就徹底杜絕了php注入。其實說這話的人沒有好好想過,更沒有嘗試過用萬能密碼進php的後台。其實gpc魔術轉換是否開啟對用萬能密碼進後台一點影響也...

mysql萬能 Mysql的萬能優化方法

在命令列執行 1.檢視優化器狀態 show variable like optimizer trace 2.會話級別臨時開啟 set session optimizer trace enabled on end markers in json on 3.設定優化器追蹤的記憶體大小 set optim...

萬能的應用商店 WiFi萬能助手

許可權列表 wifi萬能助手 獲取定位 允許應用通過網路或衛星對裝置進行定位 獲取額外的位置資訊提供程式命令 獲取額外的位置資訊提供程式命令。惡意應用程式可藉此干擾 gps 或其他位置源的正常工作。檢視網路狀態 允許應用程式檢視所有網路的狀態。開關wlan 允許應用開啟或關閉wlan 作為帳戶身份驗...