通过ShellExecute启动时调试应用程序

时间:2010-11-30 06:00:29

标签: winapi debugging visual-c++

我正在尝试通过ShellExecute() API调用启动应用程序。该应用程序仅包含一个主要功能,可以进行一些处理和退出。

现在我已将DebugBreak()放在main的开头。调用ShellExecute()时,应用程序成功启动,但不会要求中断。

如何使用ShellExecute()从其他应用程序启动时调试我的应用程序?

我正在使用VC ++。

4 个答案:

答案 0 :(得分:1)

如果DebugBreak()不适合您,请尝试_CrtDbgBreak()。请注意,_CrtDbgBreak仅适用于调试版本。

_CrtDebugBreak绝对适合我在启动时启动进程,虽然我很确定DebugBreak也可以。

请注意,这两个函数都会使进程崩溃,因为它们会引发异常。这是正常的,让您有机会通过崩溃对话框附加调试器。 (崩溃对话框还允许您终止进程;显然不要使用它。)

另请注意,如果你的main周围有一个全能的SEH异常处理程序,那么DebugBreak&朋友将被吞没,应用程序将退出而不显示崩溃对话框或让您附加到它。

答案 1 :(得分:0)

你不能用VC ++做到这一点;使用WinDbg调用所有子进程只需要.childdbg 1。使用VC ++,可以使用图像文件执行选项 - 请查看http://codereflect.com/2009/09/20/how-to-debug-child-process-using-windbgvisual-studio/以获取更多信息。实际上,如果你有时间学习WinDbg,那就更好了。

答案 2 :(得分:0)

你可以试试这个,在xp系统中没问题。

app.exe是您的应用程序名称,

-s1 ...- s3是命令行参数。

HINSTANCE hRet = ShellExecute(NULL,L“open”,L“vsjitdebugger.exe”,L“app.exe -s1 a1 -s2 a2 a3 -s3”,szExePath,SW_SHOW);

答案 3 :(得分:0)