约有 17 项符合查询结果, 以下是第 2 - 2项。
费时 < 1 秒。
如果从MSDN里发现编译器有不同的“异常处理模型”是“雾里看花”的话,张老师的分析就是让“云开雾散”了。非常感谢张老师的帮忙。
编译器的“优化”功能真是恐怖,要是不懂汇编语言,还真的难以发现事情的真相。
记得还有一个编译器优化的案例,就是关于全局变量的问题,如果不声明为“易挥发”的,你在一个线程的循环体里,试图根据这个全局变量的值来跳出循环的话,可能就会陷入死循环。看了汇编你会发现,原来编译器根据某种“优化法则”,把“对这个全局变量的判断”优化到循环体外面去了...
回头想想,人家优化得也没错,理由很充分啊:你自己明明已经告诉人家编译器那个函数“肯定不会抛出异常”了嘛(加了/EHsc编译选项),那try...catch不就是个摆设嘛,当然要把你优化掉。
听起来也没错。
...
Posted in C/C++本地代码调试
by
dos
on 2008-08-21
已经发了,谢谢张老师关注!
正如信中说的,在MSDN的帮助下,发现exe程序catch不到dll导出函数的异常,可能跟exe的“异常处理模型”/EH编译选项有关。在某些选项下,甚至如下面的代码都不会catch到异常,直接崩溃:
try
{
int* p = NULL;
*p = 0;
}
catch(...)
{
//do something
}
具体原因可以在MSDN的“/EH(异常处理模型)”中找到答案。
...
Posted in C/C++本地代码调试
by
dos
on 2008-08-20
看完奥运会男子3米跳板决赛,中国得了一金一铜,真是不容易,向他们表示祝贺~...
...
看奥运间隙,也不忘研读张老师的著作,当然,重点看了576-577,也看了前后相关的数页内容,参考了P945。感觉张老师对CRT的分析是很细致的...
不过,真的很惭愧,我还是没有发现为什么MessageBox调用会影响到try catch的运作。
唉~希望我没有“死读书”,或者“读死书”了,呵呵~...
张老师提到的576、577页,谈到的应该还是在有调试器的环境下的CRT处理,可是正如我上一个帖子说的,我测试发现一次可以catch到exception一次不可以,都是没有调试器参与的,都是是在文件夹里双击运行的程序的。
不知道是不是vc++ ...
Posted in C/C++本地代码调试
by
dos
on 2008-08-19
嗯~谢谢张老师解惑。
因为张老师的书太厚,不方便随身携带,等我回家仔细研究下~....
考虑是不是建议部门也买一本,放办公室,大家查阅也方便,呵呵~..:)
在仔细看书前,还是忍不住想请教张老师:
您刚刚简单地说了下“在有调试器的时候”的情况,以及“没有被调试时”的情况。可是我在做试验时,每次运行exe,都是在没有在调试器参与下运行的。步骤是:
1、修改代码;
2、编译链接成exe;
3、跑到release文件夹下,双击exe图标。
在程序运行期间也没有attach任何调试器。只是在已经出现了CRT的runtime error框之后,才attach了Windbg,列了一下栈回溯。
...
Posted in C/C++本地代码调试
by
dos
on 2008-08-19
谢谢张老师指点迷津!
在问题2,张老师猜测可能是服务器提供的API开发库直接用MessageBox弹出的框,其实并没有异常。
我研究了一下,那个框好像是VC运行库弹出的著名Runtime error框。后来用Windbg打开保存的crash dump文件,用~* kPL看了下栈回溯,发现确实是msvcr71模块弹的(从这一点,可以推测这个产品提供的客户端API的DLL应该是用VS .net 2003编译的,因为我用的是VS 2008,对应模块应该是msvcr90了)。
下面是crash dump的部分栈回溯:
0:004> ~* kPL
0 Id: 13b0.15dc Suspend: 1 Teb: 7ffdf000 Unfrozen
ChildEBP ...
Posted in C/C++本地代码调试
by
dos
on 2008-08-19
前阵子写程序,为一个服务器产品做客户端开发,使用该服务器产品的客户端 C++接口API。
该产品客户端和服务器使用CORBA协议通讯,好在我不需要用CORBA协议写客户端程序,该产品的C++ API接口已经封装了CORBA通讯的细节,我只需要直接调用API的DLL导出方法就好了。
一切似乎很简单明了,程序没有什么困难地写好了。开始进入调测阶段,发现程序不定期地崩溃,崩溃时弹出的框框里写着“Runtime error! Programm:........ This application has requested the Runtime to terminate it in an unusual way,please ...
Posted in C/C++本地代码调试
by
dos
on 2008-08-18
链接不可用了好像....
再仔细一看,倒~...原来是2年前的帖子....
...
我现在喜欢的书一定会买纸质版的,倒不是因为支持正版之类,确实觉得纸质的书看起来方便,随时随地,而且也不损伤眼睛,而且还有手感。
当然,这需要有一定的经济基础来支撑,当我发现CPI涨得连中午跟同事拼桌吃顿工作餐都需要花费十几二十多的时候,花个百八十元买本自己喜欢的书也就没有心疼的感觉了....
当然,如果喜欢的书有电子版的我还是会保存下来,最大的好处就是查阅方便。毕竟我不可能像中学生似地每天背着一书包的书去上班吧。而且电子版在电脑上查阅检索确实有纸质书所不能提供的方便。有时候手捧着纸质书,想找一个以前曾经看到过但是忘了在哪一页的东西,感觉无从下手,情急之下,长期使用电脑的职业病让我曾在一瞬间幻想纸质书 ...
Posted in Windows内核
by
dos
on 2008-08-15