我想用NetBeans在Java中調試一個方法。爲什麼NetBeans Java調試器永遠無法訪問此代碼?
這種方法是:
public Integer getNumberOfClamps(Locations paLocation) {
Integer ret = -1;
List list = new ArrayList();
String removeme = "ABC";
if (paLocation == null) {
return ret;
}
try {
IO io = new IO(this.getSchemaName());
Session session = io.getSession();
String sql = "select count(*) from assets a join assettypes at on (at.id = a.assettype_id) ";
sql += "where a.currentlocation_id = " + paLocation.getId() + " and at.clamp = 1 and at.active = 1;";
list = session.createQuery(sql).list();
// for some reason, list is empty yet MySQL reports 40 records
// and the following two lines are never reached!
ret = list.size();
removeme = "WHAT???";
} catch (Exception ex) {
ret = -1; // explicitly set return
} finally {
return ret;
}
}
邁向方法的中間,你會看到list = session.createQuery(sql).list();
出於某種原因,這是返回即使當SQL手動運行,我得到一個空列表40結果。
但奇怪的是,一旦.list()
被調用,它會跳轉到finally
塊,永遠不會到達其餘!因此,對於測試,'removeme'應該等於WHAT???
,但調試器仍將其報告爲ABC
。
什麼給?
你確定*它不通過catch塊嗎?這聽起來像是一個異常正在拋出...... – 2012-01-18 21:17:58
這是可怕的異常處理,你吃任何異常,所以你怎麼知道發生了什麼,至少打印出堆棧跟蹤! – 2012-01-18 21:20:21
@JonSkeet絕對確定。我在異常塊中有其他代碼。你看到的只是一個瘦身的例子。 – cbmeeks 2012-01-18 21:29:30