各位,小弟有一特别奇怪的问题,百思考不得其解。
问题描述如下:
C++里写了一个CAN通讯联机函数,C#里调用,BUTTON触发调用一两次,程序没问题。BUTTON触发调用多次后程序就死机。
代码如下:
 private void button32_Click(object sender, EventArgs e)
        {
            byte RE = 0;
            RE = CANLINK.ConnectForCalibration("0000");
            if (RE != 1)
            { MessageBox.Show("联机不成功"); }
            else
            {
                MessageBox.Show("联机成功");
            }
        }以上代码,BUTTON点一两次没问题,有时候点十几次也没问题,多点几次程序就死了,打开任务管理器,发现死程序的时候,程序所占用的内存和CPU都不高。我的调试办法:
1、加TRY CATCH
try
            {
                RE = CANLINK.ConnectForCalibration("0000");
            }
            catch (Exception EX)
            {
                MessageBox.Show(EX.Message.ToString());
            }依然程序死掉,而且抓不到错误。2、 private void button32_Click(object sender, EventArgs e)
 {
            byte RE = 0;
            RE = CANLINK.ConnectForCalibration("0000");//设置断点
            
            //单步调试调用
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
            RE = CANLINK.ConnectForCalibration("0000");
                 
}原来怀疑该调用函数有问题,于是单步多次执行,均未发现程序死机现象。说明调用的函数应该没问题。为什么在界面上反复点BUTTON来触发该函数,无论点快点慢,均死程序,而且,无法抓到错误处。内存,CPU都正常。
而用单步调来多次执行该函数却一点问题没有,无论单步快慢,均不会死。