Windows 下调试问题一则
今天跑昨天晚上写的一个小程序,莫名其妙的不能运行。开 gdb 调试没有任意异常,直接退出,连 main 函数都没有进。注释掉大量代码后依旧。把 gdb 从 6.3 升级到 6.8 后,再调试,捕获了一个不知名的异常。
又把代码注释干净,程序正常了。仔细考虑了一下,最后注释掉的代码间接 link 了 lua 的库。而 lua 的库引用了 lua 的动态库。程序运行时可能是因为没有找到 dll 而退出。
把 lua 的 dll 加到 path 中就正常了。但是奇怪的是,系统并没有弹出对话框提示。仔细想了一下,原来是我没有从 explore 启动控制台,而是在编辑器里启动的,可能是编辑器软件没有写好,把本应该系统弹出的缺少 dll 的对话框拦截了。
Soloist 同学说,他也碰到过一次 Total Commander 吃掉缺少 dll 无法启动程序的对话框。记录一下这个问题,祭奠我找问题逝去的半小时。
Comments
楼主写的真不错
Posted by: 最有效的减肥药 | (13) October 7, 2010 11:13 AM
你懂的编程语言好多啊,真强!
Posted by: 酷睿N核 | (12) August 25, 2010 12:45 AM
真的很厉害呢
Posted by: qvod | (11) August 13, 2010 09:07 PM
写完变成1小时了。。。
Posted by: ron | (10) August 12, 2010 05:06 AM
羡慕,会编程
Posted by: 梦 | (9) August 10, 2010 10:09 PM
可以确定的是如果你用某商业编译器调试可以在半分钟内找到问题
Posted by: lichking | (8) August 10, 2010 09:28 AM
@yue169
难道 Windows 下除了 gcc 还有别的选择?
连 C99 都不支持的某商业编译器?
Posted by: Cloud | (7) August 9, 2010 12:56 AM
云风大哥在windows下写程序也用gcc吗?
Posted by: yue169 | (6) August 8, 2010 12:27 AM
弄这么多年windows程序已经养成习惯了
见到怪事先上depends
90%的情况可以一眼看到问题
Posted by: liuzhi | (5) August 7, 2010 01:23 AM
对于这个问题,我可以给出更加详细的解释,问题的原因在于CreateProcess这个API的调用,这个API的作用我就不多说了,相信不用解释,其中很重要的是一个参数,CREATE_DEFAULT_ERROR_MODE,默认情况下是没有的,也就是吞掉错误提示的。加上后就有错误提示了。第3方软件,包括云风提到的编辑器,totalcommand都不注意这点,导致了出现的吞掉错误提示的情况。
Posted by: JTianLing | (4) August 6, 2010 06:10 PM
谢谢,长了不少知识。
Posted by: 调试 | (3) August 6, 2010 05:02 PM
学习云风的调试方法。
Posted by: 我是人类 | (2) August 6, 2010 01:09 PM
沙发!
Posted by: 我是人类 | (1) August 6, 2010 01:08 PM