« mingw 下的 stack backtrace | 返回首页 | Proto Buffers in Lua »

Windows 下调试问题一则

今天跑昨天晚上写的一个小程序,莫名其妙的不能运行。开 gdb 调试没有任意异常,直接退出,连 main 函数都没有进。注释掉大量代码后依旧。把 gdb 从 6.3 升级到 6.8 后,再调试,捕获了一个不知名的异常。

又把代码注释干净,程序正常了。仔细考虑了一下,最后注释掉的代码间接 link 了 lua 的库。而 lua 的库引用了 lua 的动态库。程序运行时可能是因为没有找到 dll 而退出。

把 lua 的 dll 加到 path 中就正常了。但是奇怪的是,系统并没有弹出对话框提示。仔细想了一下,原来是我没有从 explore 启动控制台,而是在编辑器里启动的,可能是编辑器软件没有写好,把本应该系统弹出的缺少 dll 的对话框拦截了。

Soloist 同学说,他也碰到过一次 Total Commander 吃掉缺少 dll 无法启动程序的对话框。记录一下这个问题,祭奠我找问题逝去的半小时。

Comments

楼主写的真不错

你懂的编程语言好多啊,真强!

真的很厉害呢

写完变成1小时了。。。

羡慕,会编程

可以确定的是如果你用某商业编译器调试可以在半分钟内找到问题

@yue169

难道 Windows 下除了 gcc 还有别的选择?

连 C99 都不支持的某商业编译器?

云风大哥在windows下写程序也用gcc吗?

弄这么多年windows程序已经养成习惯了
见到怪事先上depends
90%的情况可以一眼看到问题

对于这个问题,我可以给出更加详细的解释,问题的原因在于CreateProcess这个API的调用,这个API的作用我就不多说了,相信不用解释,其中很重要的是一个参数,CREATE_DEFAULT_ERROR_MODE,默认情况下是没有的,也就是吞掉错误提示的。加上后就有错误提示了。第3方软件,包括云风提到的编辑器,totalcommand都不注意这点,导致了出现的吞掉错误提示的情况。

谢谢,长了不少知识。

学习云风的调试方法。

沙发!

Post a comment

非这个主题相关的留言请到:留言本