一个dll,在服务器端读成byte[](文件流转换),然后通过网络传给客户端。客户端拿到后,加载进assembly反射调用。但是,无法调试,断点无响应。。dll,服务端,客户端,都在一个解决方案里面的,请问这种情况如何调试。

解决方案 »

  1.   

    是dll的代码无法调试,服务器和客户端还是可以调试的
      

  2.   


    当然加载成功,所有功能都有,包括UI和逻辑,全部杠杠的。但问题是,莫法直接调试,以后加新功能就会很痛苦,遇到问题只有靠人为的捕捉(写文件或messagebox出来),甚至靠猜,这样效率太低了
      

  3.   

    如果dll是采用引用文件的方式的话,请确定pdb文件与dll文件是否同一次编译时生成的
      

  4.   


    不是引用,编译好的dll,可能丢到其他目录里了,比如直接桌面。服务器直接读文件到byte[],类似插件的那个感觉。我把pdb文件copy过去根本没有用,因为不是引用加载,是纯文件操作读取的。也就是说,尽管这个dll是自己生成的,但加载的方式是纯第三方的方式。
      

  5.   


    兄台,继承过来实现新的功能,这个是新的类了,是你本机新建的类,调试有问题么?
    原类如果健康的话或者很成熟你为什么要去碰它呢?举例,当前用的所有类都是继承Object的,包括你的Button类,你加按钮报错了,你会去Object里边找么?
      

  6.   

    所有错误都显示详细的错误堆栈的,可以跟踪到错误源,只不过无法断点到dll内部,外部调用的位置可以断点,之后如果是dll内部错误,就要查看错误堆栈和内部错误信息,分析具体哪个部位出错,如果每个功能都是一个小的方法,可以精确到具体某个方法出错,如果你一个方法执行完毕所有功能,就不知道具体什么位置错了。
      

  7.   

    继承还是无法将断点打入父类中去的,而错误是由父类引发的情况下,就必须查找父类的实现过程,对父类修改,这里的父类因为也是自己写的,所以不见得正确,也需要调试,但是楼主的父类未经过调试就通过dll给另一方加载,由另一方去调试,自然困难重重。
      

  8.   


    是这样的,因为需要实现成类似插件那种功能,所以dll里面任何的类,对客户端或服务端都是不可见的。调用方甚至根本不知道这样一个dll以及里面的类的存在。你看dll都读成字节流,然后下载到客户端,再反射出来调公共接口显示界面。这样一个dll,里面的代码似乎根本无法调试
      

  9.   


    就是这样啊,我是可以捕获到外部调用点,但dll内部不能步步跟踪,debug的效率好低哦。所以我才问有没有办法可以跟踪到dll里面去,毕竟dll的代码跟其他工程在一起的。
      

  10.   

    dll编写好后,先在服务端调试正确了再发布啊。要确保所有异常都是可以被捕获的,可以给出对应信息的才行,将所有未知异常都处理掉。到了客户端,使用dll的时候,对于异常只需要给出信息提醒用户即可,无需任何处理,做不到就是设计问题了。
      

  11.   

    看不出你所谓的“调试”是什么意思。如果仅仅是断点没有中断,那只能说明那个代码根本没有走到,而不是不能中断。回到编程知识上来说,如果你能“写文件或者messagebox”,那么你就能写断言。为什么不写正规的断言,却要写什么文件呢?
      

  12.   

    这就谈不上调试了!你的开发方法有问题。实际上任何东西,你都需要一个测试引擎。例如你写一个类库工程,那么你就需要一个console或者windows应用程序调用它,然后写上一百个测试程序,经常将这一百个程序跑上一千遍,这个类库工程才给其它程序(你的所谓“客户端程序”)使用。而你的客户端程序也是一样的开发机制。如果没有测试驱动的基本概念,你就是拿最终要发布给客户的程序来“调试”,那么这种开发方法应该说是非常低级的,是纯粹学校里的业余手工开发方法。可惜很多刚毕业一两年的人,没有找对一个好的软件公司,所以学不到真正工程项目中的开发方法和技术,他所在的公司还是那种“只要拼凑出程序就OK”的想法。
      

  13.   

    靠“调试”来发布产品的人,其软件编程的质量通常是极其极其不靠谱的。一个有质量的产品,它变得很复杂、(应需求变化而)千变万化地修改了之后,让然可以非常敏捷地开发。这不是靠调试,是靠测试。真正了解测试驱动技术的人,很少调试(虽然总是更加熟练地调试),因为测试就非常及时地告诉他bug了,他的问题不会堆积在一起爆发,因此往往都是每一次都修改一两行代码就能快速迭代开发。如果我们遇到一个人仅仅抱着“调试开发”的思路来问问题,我们甚至可以想见他可能非常难以接受我们的好的建议。因为他开发方法就不对,他以拼凑见长,而不是以灵活地设计见长。