java - IDEA IDE - 設(shè)置字符串斷點
概述
IDE環(huán)境為IDEA2022.3
在看一段序列化的代碼, 想找出報錯拋異常那個點, 理解一下代碼實現(xiàn).
因為序列化代碼實現(xiàn)在第三方j(luò)ar包中, 改不了(只讀的). 根本數(shù)不清第幾次才會開始報錯. 上下文前后也沒有一個數(shù)值型的值可以用來下斷點.
想下一個字符串斷點, 到了要序列化的節(jié)點名稱, 再單步調(diào)試.
要調(diào)試的代碼如下:
private void readElements(InputNode node, Object source, Section section) throws Exception {
LabelMap map = section.getElements();
InputNode child = node.getNext();
while(child != null) {
String name = child.getName();
Section block = section.getSection(name); // 想在這里下斷點, 使name等于預想字符串(e.g. "package")時停下來
if(block != null) {
readSection(child, source, block);
} else {
readElement(child, source, section, map);
}
child = node.getNext();
}
validate(node, map, source);
}
直接設(shè)置條件斷點為"package" == name
, 這種是不好使的. IDEA也不提示這種條件斷點無效, 算是個bug.
看了資料, 都是用IDEA下數(shù)值型斷點, 那樣是好使的. 沒看到怎么下字符串斷點的資料.
自己實驗了另外一種方法, 可以對字符串下有效斷點.文章來源:http://www.zghlxwxcb.cn/news/detail-715809.html
筆記
右擊已有的無條件斷點, 在彈出框中選擇更多.
展開條件編輯區(qū)
我填入的條件為: 當String name 為 "package"時, 需要命中.
因為IDEA斷點的條件判斷, 只能判斷數(shù)值型和指針型.
所以需要判斷字符串中字符的字符值, 用記事本 + vscode + hex插件, 就可以知道字符串的hex值, 還可以找一些其他的專業(yè)hex工具, 可以很方便的將字符串對應的hex數(shù)組拷貝下來.
具體寫斷點條件時, 是多個條件的組合.
String name 指針不為空.
name的字符串長度為7.
每個字符是什么值.
其實有了前2個條件的判斷, 命中的次數(shù)會大大的降低.
再配合檢測1~2個位置的字符值, 就能過濾到獨一個的name名稱.
還好這個字符串值不長, 我都寫上了.
寫好, 好使的條件斷點如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-715809.html
((null != name) && (7 == name.length()) && (0x70 == name.value[0]) && (0x61 == name.value[1]) && (0x63 == name.value[2]) && (0x6B == name.value[3]) && (0x61 == name.value[4]) && (0x67 == name.value[5]) && (0x65 == name.value[6]))
END
到了這里,關(guān)于java - IDEA IDE - 設(shè)置字符串斷點的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!