namespace RT
{
public delegete void FrameReceivedDelegate(byte[] Frame,int actuallyLength);
public class Decoder
{
public event FrameReceivedDelegate FrameReceived;
public void ProcessSignal(string text){
byte[] frame = new byte[text.Length/2];
.......
.......
.......
if(FrameReceived != null)
{
FrameReceived(frame,frameBitLength / 8);//这句话这里抛异常
}
}
}
异常
引发的异常:“System.InvalidOperationException”(位于 mscorlib.dll 中)
System.InvalidOperationException : 可为空的对象必须具有一个值
我查看public event FrameReceivedDelegate FrameReceived;
全部引用,发现只有这一处有用到这个
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
有完整錯誤的callstack 嗎?
這樣看不太出來
我修改了问题,你再看看?
@小草上飞飞:
這段代碼中,有哪個變量是Nullable 類型嗎?
@RosonJ: 都是var ,要死了
@RosonJ: 找到了那个Nullable的变量呢?把他做个处理吗?
@小草上飞飞:
var 並不改變類型
看看有沒有方法回傳、變量或是類別屬性是Nullable (例如: int?, decimal?,後面帶問號的)
因為從錯誤訊息來看是Nullable 類型的變量沒有值
@小草上飞飞:
確定它在被使用前有被賦予值,而不是null 的狀態
@RosonJ: 对Double? 类型直接(Double)处理了,我是不是只要对null时做个处理就好了?
@小草上飞飞:
恩,先對null 的情況處理
@RosonJ: 做完处理,发现还有一个异常。但是我try...catch 捕获不到
引发的异常:“System.InvalidOperationException”(位于 rt.server.dll 中)
···
rt.server
···是我们一个引用的项目,我有源码,我给所有引用的方法都加了try。。。catch。。还是捕获不到异常
@小草上飞飞:
在最外層加try catch 也攔不到?
@RosonJ: https://www.cnblogs.com/tomahawk/articles/5993874.html
我按照他这么写都不行,三种方法都试了
@小草上飞飞:
rt.server.dll
這顆dll 若是有做過特殊處理,有可能無法捕獲詳細錯誤資訊
只能開原碼看看,被呼叫的方法有沒有可能的錯誤點
@RosonJ: 这个rt.server项目是解析信号的,里面有好多东西不知道怎么执行的
@RosonJ: 我给里面所有的方法挨个都加了try ...catch...,把所有的异常都抛出,我算是找到了
@RosonJ: 信号解析里判定两个东西不等,就new InvilidOperationException();但是我为啥在外面捕获不到啊
@小草上飞飞:
我只知道可以讓外部無法取得詳細錯誤資訊
但我司有一間合作銀行的dll ,就做到無法攔截exception ,我們的人也沒研究出來
如果你找的做法,再跟我分享吧
通过InnerException 可以得到具体错误的详细信息
我试出来了,哈哈哈,谢谢