2009-02-25 68 views
2

如何确定VB6(或5)应用程序不启动的原因?因此,我无法附加调试器。我有我的IDA Pro免费软件,但需要一些指导,以从哪里开始。调试不启动的程序

我没有这个程序的源代码,只有.exe。当我说它没有启动时,我双击.exe,没有任何反应 - 没有任何进程在运行 - nadda。

在admin下运行它会创建三个空文件夹,然后在显示UI之前以静默方式退出。 OllyDbg告诉我有一个'不精确的浮点结果',但我需要花几个小时或几天的时间来学习OllyDbg给我的所有信息。我的书Advanced Windows Debugging应该在周一或周二抵达。

+0

@ProfK - 你能详细说明一下没有开始吗?根本不运行?或运行,但没有显示任何东西?即显示在ctrl + alt + del? – melaos 2009-02-25 09:45:20

+0

我已经详细阐述过了。 – ProfK 2009-02-26 11:35:22

+0

等一下,如果你没有源代码,你期望如何调试它? – 2009-03-12 16:40:48

回答

3

好吧,就像dlamblin提到的那样,我会从sysinternals获取ProcExp,FileMon和RegMon,并将它们设置为监视此过程,然后尝试启动它。毫无疑问你会得到的一个产品的一些信息如下:

  • 配置文件它试图打开/访问
  • 注册表项,它在寻找
  • 错误级别从过程返回,因为它退出

如果做不到这一点,抢免费VBDecompiler,并看看有什么这个东西是它做的启动代码,可能导致你的地方....如果你抛出一个异常,他们有一个

:Err 

类型的标签,该标签可能只是落空,并退出没有警告,或什么...

我用被命名为“setup_free-VBDecompiler.zip”的VBDecompiler。你可以谷歌它找到它,现在甚至可能有更好的版本。但是,不要指望它反编译成原始的源代码,它只能使它成为“最好的猜测”,但它至少可以帮助你渡过这个障碍......小心,谨慎/尊重任何EULA,可能会阻止ANY逆向工程...

让我知道这个信息是否有帮助。如果你仍然无法找到任何地方,请联系我,然后将.exe发给我,我可以在我的诺曼沙盒中运行它,这可能会给我们更多关于所做功能调用的信息以及应用程序试图执行的操作...

1

在你的Sub Main你应该确保有一个On Error Goto声明。这个机会是一个例外正在被抛出并且没有被捕获。尝试在错误处理程序中写入日志文件并查看所得结果。

3

如果没有源代码,您可能没有多少运气,但您可以查看this tip on MSDN以自动启动调试程序。这有点笨拙,但它适用于任何程序。我相信,表现良好的C++应用程序会停在主要位置。它可以成为早期错误的救星。

1

我会说抓住OllyDbg的副本,并查看何时/为什么应用程序决定终止。

11

看起来我很喜欢回答这个问题,但试着看看Windows Events日志。这里经常有信息可用,比如控件,或者你的程序依赖于没有找到的DLL。

12

你是说程序启动但崩溃之前,你可以附上?如果是这样,请尝试在调试器下启动该程序。

在Visual Studio中,您可以通过要做到这一点

  • 文件 - >打开项目
  • 选择有问题的EXE
  • 按F5
5

您是否尝试过内运行它一个cmd shell来查看它是否将任何数据返回给控制台?是否创建了任何日志文件?

即使因为程序未启动而无法附加调试程序,您可以从调试程序中启动它,OllyDbg将允许您这样做,就像任何其他值得使用的调试程序一样。之后,您可以尝试调试为什么代码不是首先启动。

9

首先,检查Dependency Walker它会告诉你是否有任何缺少应用程序需要的DLL。

其次,可执行文件的名称是什么?尝试将其重命名为MYDUMMY.EXE并再次运行它。有些名称因为已经在使用而不起作用。我曾经帮助过一位试图让他的第一个应用程序运行两周的新程序员。它被称为DISPLAY.EXE,它已经是一个Windows模块,所以它不会加载。

1

您可以编写一个简单的启动程序,该程序在dwCreationFlags参数中使用CREATE_SUSPENDED标志调用CreateProcess()。

它会启动你调试的程序,它的线程会立即被冻结。然后你可以附上。

主程序可能会等上半分钟,然后调用ResumeThread()。到那时你将连接调试器。

0

使用WinDBG,您可以使用“打开可执行文件”(或仅执行windbg {可执行文件名称}在ntdll启动期间立即连接到调试程序,并在断点处停止,然后开始运行从那里(类型“G”)应给出关于问题的一些信息。

0

另一个想法,尝试在兼容模式(右CLIC,属性,兼容性选项卡)与Windows 98或Windows 2000

还运行给“每个人”完全访问该程序创建此文件夹的文件夹

4

我想你请参阅SysInternals过程监控器,具体遵循Case of the Unexplained研讨会视频的一些建议。

在启动之前开始监视(所有内容),然后停止监视,当您觉得它已经完成错误时,应该在几秒钟内完成。然后,您将详细记录所有流程中发生的所有事件。您可以搜索您的流程名称,并查找未成功的内容,例如可能没有权限,或者从系统获取一些其他抱怨,因为您没有向用户报告,因为您没有在通用错误陷阱中编写代码一个对话框。那么,也许即使你有它出于某种原因无法显示对话框。进程监视器日志会告诉你它。

这就像在一堆日志中没有编码的自动日志记录。

0

“不精确浮点结果”可能有时(很少,但发生在我身上)点问题(浮动)数表示 - 当程序尝试在内部解析某些硬编码字符串,并假定小数始终期间或sometihing seprated像类似。

尝试更改系统区域设置或仅使用数字或货币格式(小数和千分隔符)。

1

1)如果妳有MS Visual Studio 2005中,它允许如下的命令行运行它:

devenv.exe is the executable(mostly in installation path e.g.(C:\Program Files\Microsoft Visual Studio 8\Common7\IDE) 

运行devenv.exe的--help它给人的命令行选项 我发现你的情况有一些相关的选项:

devenv.exe/debugexe
打开指定的可执行文件为debugg编辑。命令行的其余部分将作为其参数传递给此可执行文件 。

希望有所帮助。

-AD

相关问题