2013-07-10 51 views
0

我正在從我的應用程序下面的異常數組的邊界之外:在異常 enter image description hereC# - 指數

#1681指向這條線在我的應用程序的代碼: enter image description here

iSC_Queue是一個簡單的DTO類是這樣的:

public class iSC_Queue 
{ 
    public string ID     { get; set; } 
    public string TriggerTableName { get; set; } 
    public string TriggerTableID  { get; set; } 
    public string TriggerTableIDValue { get; set; } 
} 

這怎麼可能?我非常確定,List初始化不會產生此索引超出界限的錯誤。它必須發生在我的「Parse Queue Entries」代碼塊中的某處。

如何獲得C#異常以顯示錯誤所在的實際行/堆棧跟蹤?

+2

實際解決底層問題是一個蹩腳的藉口,但如果我在你的鞋子裏,我會添加一堆調試輸出來查看代碼的哪個部分實際執行了 – Nicolas78

+1

CTRL D,C會調出調用堆棧(或調試 - > Windows - >調用堆棧) –

+1

而且,我知道它不是列表init。這個函數不包含在try catch中 – SynerCoder

回答

2

看起來它不是你所在的那條線,你可能在另一條線上出現錯誤。

您正在看到一個消息框,因此它必須位於其中一個try catch部分。

如果你在下一節中解析字符串,很可能你試圖將字符串拆分成幾塊,而你沒有得到你期望的子字符串的數量。

如果您顯示更多代碼,我們可以提供更多幫助嗎?

+0

是的,我喜歡全球嘗試捕捉以及內部的。我已經縮小到第一個代碼區域(解析)工作完成的地方:http://pastebin.com/1vaNSV7k – Latheesan

0

試試這個

[Serializable()] 
public class iSC_Queue 
{ 
    public string ID { get; set; } 
    public string TriggerTableName { get; set; } 
    public string TriggerTableID { get; set; } 
    public string TriggerTableIDValue { get; set; } 
} 
+0

不幸的是,問題並不在於DTO,而是解析代碼(這裏的某處,http://pastebin.com/1vaNSV7k) – Latheesan

0

你真的確認消息框的屏幕截圖是從當前版本的應用程序(即使你沒有小到刪除或添加到代碼中的空行使其更具可讀性)?

如果存在編譯錯誤,VS很可能運行較舊的二進制文件,然後可以切換行數。否則,應用程序不應該指向該行。

+0

是的,這是當前版本。我有一個全局異常捕獲器以及內部代碼塊。也許全球的一個被觸發,而不是內部的? – Latheesan

0

異常消息中給出的行號不是來自應用程序的.exe或.dll文件;它來自.pdb文件。如果沒有.pdb文件存在,則根本不會得到行號,而只是從方法開始的一個字節偏移量。

如果您收到的行數似乎與您的源代碼不符,那麼[行號]行號是正確的,但是您查看的是錯誤版本的源代碼,或[b ]行號不正確,因爲您的應用程序文件和.pdb文件不同步(可能是上一次將新版本安裝到服務器,沒有安裝新的.pdb文件,因此舊文件仍然存在)。

0

本身不是答案,而是對我讀過的一些人的反駁。 我偶然發現了這一點,而試圖弄清楚爲什麼我得到同樣的錯誤有:

List<string> strTemp = new List<string>(); 

(編輯HTML呈現 - 錯過了<串>標籤) ON OCCASSION

至少,這是該線指出。我添加了「有時」,因爲它並不總是發生。通常情況下(幾乎不接近),代碼按預期工作。然而,偶爾(一次幾天 - 幾周?)它會不斷地拋出上述情況。然後過了一段時間,停止。對於記錄,部署和日期相同的Web服務.pdb和.dll,因此不會出現代碼不匹配的情況。

另請注意:這是我啓動的特定代碼的第4個版本(隱藏功能,直到我得到它的權利)。在所有4個版本中,偶爾會出現錯誤,並且所有4個版本都有錯誤指向上面的行(由於更改導致4個不同的行號)

我一直在傾向於windows/chrome更新,導致問題來來去去,但這只是一個瘋狂的猜測,因爲我還沒有找到更好的答案。

+0

小調:現在5個不同的部署,5個不同的行號 - 仍然指向上面的聲明:( – John

+0

現在虛幻錯誤已經轉移到函數中的第一次初始化 - 首先 - bool bReturn = false;正在返回「 \t對象引用未設置爲對象的實例「錯誤,當我將其分割時,將該賦值移動到聲明塊下面,以下行 - int i = 0;開始提升它... *嘆氣*這是粗糙的一個 – John