我可以指定我希望gdb在第x行中斷時char* x
指向一個字符串,其值等於"hello"
?如果是,如何?如何在gdb中設置條件斷點,當char * x指向值爲「hello」的字符串時?
回答
您可以使用strcmp
:
break x:20 if strcmp(y, "hello") == 0
20
是行號,x
可以是任意文件名和y
可以是任何變量。
注意:您必須已經運行該程序,以便GDB可以看到stdlib。否則:在當前上下文中沒有符號「strcmp」。# – 2015-07-27 20:45:49
@ naive231通過「看」我的意思是看功能,所以你可以打破他們,而不是來源:你必須擊中'運行',以便動態庫加載。對於源,谷歌它,並找到:http://stackoverflow.com/questions/10000335/how-to-use-debug-version-of-libc :-) – 2015-11-13 09:52:01
break x if ((int)strcmp(y, "hello")) == 0
在一些實現上,gdb可能不知道strcmp的返回類型。這意味着你將不得不施放,否則它總會評估爲真!
Since GDB 7.5,您可以使用這些方便Convenience Functions:
$_memeq(buf1, buf2, length)`
$_streq(str1, str2)
$_strlen(str)
$_regex(str, regex)
顯得相當不必執行「洋」 strcmp()
的過程中少問題每個斷點被擊中一次堆疊。
注意你的GDB需要用Python支持進行編譯,這對當前的linux發行版來說不是問題。可以肯定的是,您可以通過在GDB中運行
show configuration
並搜索--with-python
來檢查它。這個小oneliner的伎倆,太:$ gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python' --with-python=/usr (relocatable)
爲您演示的情況下,使用將
break <where> if $_streq(x, "hello")
,或者,如果你的斷點已經存在,你只是想添加條件它
condition <breakpoint number> $_streq(x, "hello")
$_streq
只匹配整個str所以如果你想要更狡猾的東西,你應該使用$_regex
,它支持Python regular expression syntax。
- 1. 當數組值在cuda-gdb中更改時設置斷點
- 2. 在C文件中設置GDB斷點
- 3. 如何判斷const char *是否指向有效的字符串?
- 4. 設置自指針斷點條件在Mac OS X
- 5. GDB無法設置斷點
- 6. Lldb:設置條件斷點與字符串相等作爲條件
- 7. gdb:如何在帶空格的文件中設置斷點
- 8. 如何在gdb中爲C++設置operator()的斷點?
- 9. 使用新字符串(「hello」)在簡單的「hello」中完全無用,當它間接指向「hello」時?
- 10. 如何在運算符<上使用GDB設置斷點?
- 11. 帶指針的反向char字符串
- 12. 如何打印出由char指針指向的字符串?
- 13. 如何使用共享庫函數在gdb中設置斷點
- 14. StAXON - 當autoPrimitive爲true時,強制將字符串的值設置爲字符串
- 15. 如何設置從STD字符串的char *值(c_str())不工作
- 16. 在共享對象文件中設置gdb斷點
- 17. 使用指向字符串的指針初始化指向字符串中的字符的指針
- 18. 如何在MIPS中設置一個指向一個asciiz字符串的指針
- 19. 在gdb中,如果我使用strcmp()作爲條件斷點。我不能夠使用冒號「:」字符串parameter.print
- 20. gdb,在文件中的所有函數上設置斷點
- 21. 在gdb中設置文件寬度斷點
- 22. Visual Studio:首先設置條件斷點而不先設置無條件斷點
- 23. 如何從指向字符串的PyObject獲取char *
- 24. 如何在專用接口方法上設置gdb斷點
- 25. gdb掛鉤設置中斷
- 26. 在emacs(或DDD)中使用gdb時無法設置斷點
- 27. 在Java中,如何將字符串轉換爲char或char字符串?
- 28. 指定文本字段的值,它是字符串爲char *
- 29. 如何在Xcode中設置條件斷點?
- 30. 搜索由char *指向的字符或字符串數組*
注意:'strncmp'和'strstr'是其他有用的C查詢函數。 – 2015-07-27 20:50:08