这两天在调试libjingle,需要用到expat解析xml,vs2008版本登录openfire无任何问题,vs2010死活登录不上,调试,跟踪,最后发现
ExpatStartElement(name, atts);
函数里面的获取的name,atts只有第1个字符,
上一层就是这个XML_Parse(XML_Parser parser, const char *s, int len, int isFinal);函数造成的,在跟踪就是expat的lib库了。
思路: 自己直接把vs2008的expat库 放到vs2010里面使用了。
问题: 很多问题自己给自己造成的,程序是调出来的,除了一般的结构设计,代码就是调试,vs之类就是工具,用好watch,堆栈等
题外话:
1.忘记你那些固有的观念,忘记你那些所谓的某某语言,忘记你那些高级的低级的垃圾程序,如果你是在编码而不是在设计,熟悉手头的工具,vs,gcc,gdb它们会为你做它们该做好的事,F5,F11,F10,b,c,p,bt等。工具就是工具。不要用你的脑子做工具做的事。
2.对于自己写的代码,如果是面向过程的,某某函数,从main开始,执行必须是一步一步;而c++之类对象可能多态执行,基类在执行时才知道用了那个子类对象。但至少是可以追溯的。而如上面的问题,我们做事的时候,加入一个expat库,加入一个directshow库,加入一个python支持,加入一个别的什么,寻找问题的时候我们却忘记了这些。这个过程和定义一个变量,执行一个函数,你的定义必须正确,你的声明必须可用,又有什么区别。可是很多人都出问题在前者,因为后者才是写代码,才是程序员。而我觉得这才是最大的问题。
3.程序不像年轻的感情一样,说是莫名其妙爱上了,而它是理性的逻辑,不懂就学,但我喜欢离的远点去欣赏。所以我不是高手。
浅见为了加深理解。