您的位置:首页 > 移动开发 > Objective-C

Windows程序调试--创建映射文件

2008-10-28 08:57 309 查看
 创建映射文件
       做事后调试需要一个对应于程序创建的所有模块的映射文件。
       映射文件包含对应模块的最佳装载地址、段表、输出符号地址、静态符号地址以及程序代码地址和源程序行号的映射。

    为你的程序创建映射文件,你必须对Visual C++工程中的相应选项作适当的设置。第一步是打开映射文件生成功能、你可以在工程设置对话框里进行设置,在Link标签里的Debug类里打开Generate mapfile选项。由于一些奇怪的原因,Visual c++没有把输出程序的代码地址和源代码行号里的映射作为默认设置。要得到这些信息,还需要在Project Options对话框里键入“/MAPINFO:LINES”。得到引出序号(exorpt ordinal)也许很有用,所以在Project Object对话框末尾里也要键入“/MAPINFO:EXPORTS”。

    如果程序在一个非常低的地址上崩溃,或奇怪的地址,显然没有任何合法指令。原因可能为:

l         代码试图用一个非法函数指针调用函数
l         在调用者和实际函数之间存在原型不匹配
l         堆栈已经被破坏了,通常是局部变量的一处导致的函数返回地址被破坏掉了
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 

前两种情况,函数调用已经失败,被调用函数也就没有机会将堆栈基址指针、局部变量以及保存寄存器压入堆栈,意味着函数返回地址刚好就在堆栈顶,很容易退回到源代码。
如果为堆栈破坏,返回地址本身被覆盖的数据修改了,可能会给一些提示,如,如果指针地址看起来像4个ANSI字符(如地址0x73677562,代表ANSI的“bugs”),就可能是被一个局部字符串给覆盖了;
       在windows里发生崩溃几乎可以肯定是你代码中的错误导致的,然而,驱动程序中的崩溃极有可能就是驱动程序自身的错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows bugs object c