0

私はfirefox/chrome用のnpruntimeベースのプラグインを開発し、ff3.6 / chrome 10で正常に動作しますが、プラグインをロードした後にfirefox 4.0以降で他のプラグインをロードすると、firefoxがハングします。つまり、プラグインの後にgmailを開くとロードされた後、Firefoxは応答を停止し、プラグインコンテナと関係があることを確認しました。誰かが私がどこで間違っているのかを正確に提案できますか?任意のポインタをいただければ幸いです。前もって感謝します

これはff6のコールスタックです

ntdll.dll !_ZwWaitForSingleObject @ 12()ntdll.dll!_ZwWaitForSingleObject @ 12(
) kernel32.dll!_WaitForSingleObjectExImplementation @ 12
()kernel32.dll!_WaitForSingleObject @ 8()
nspr4.dll!_PR_MD_WAIT_CV(_MDCVar unsigned int timeout)
nspr4.dll!_PR_WaitCondVar(PRThread * thread、PRCondVar * cvar、PRLock * lock、unsigned int timeout)
nspr4.dll!PR_WaitCondVar(PRCondVar * cvar、unsigned int timeout)
xul.dll!mozilla :: CondVar Wait(unsigned int interval)
xul.dll!mozilla :: ipc :: GeckoChildProcessHost :: SyncLaunch(std :: vector、std :: allocator>、std :: allocator、std :: allocator >>> aExtraOpts、int aTimeoutMs、base :: ProcessArchitecture arch)xul.dll!mozilla :: plugins :: PluginProcessParent :: Launch(int timeoutMs)
xul.dll!mozilla :: plugins :: PluginModuleParent :: LoadModule(const char * aFilePath)
xul.dll!GetNewPluginLibrary(nsPluginTag * aPluginTag)xul.dll!nsNPAPIPlugin :: CreatePlugin(nsPluginTag * aPluginTag、nsNPAPIPlugin * * aResult)
xul。 dll!CreateNPAPIPlugin(nsPluginTag * aPluginTag、nsNPAPIPlugin * * aOutNPAPIPlugin)
xul.dll!nsPluginHost :: EnsurePluginLoaded(nsPluginTag * plugin)
xul.dll!nsPluginHost :: GetPlugin(const char * aMimeType、nsNPAPIPlugin * * aPlugin)
xul.dll!nsPluginHost :: TrySetUpPluginInstance(const char * aMimeType、nsIURI * aURL、nsIPluginInstanceOwner * aOwner)xul.dll!nsPluginHost :: SetUpPluginInstance(const char * aMimeType、nsIURI * aURL、nsIPluginInstanceOwner * aOwner)
xul.dll!nsPluginHost :: InstantiateEmbeddedPlugin(const char * aMimeType、nsIURI * aURL、nsIPluginInstanceOwner * aOwner、int aAllowOpeningStreams).. ..

4

2 に答える 2

1

最初にIPCモードをオフにしてみます。プラグインプロセスが起動するのを待っている間にスタックがハングしていることを示しているようですが、タイムアウトが必要なため、スタックがハングする理由がわかりません。IPCモードをオフにすることが役立つ場合、問題はブラウザとプラグインホストプロセス間のIPCに干渉している可能性があります。

次に、DLL内のすべてのエントリポイントにブレークポイントを追加してみます。DllMainにsleep(10000)などを配置することで、デバッガーに接続できます。プラグインがロードを開始すると、損傷を与える可能性のあるものを実行する前に、最初にそれをヒットする必要があります。デバッガーを使用してプラグインホストプロセスに接続し、到達するエントリポイントなどを確認できます。十分な時間ステップスルーすると、最終的にいくつかの手がかりが得られます。何が起こっているのかについて。

また、 FireBreathのようなものに移植してみることもできます。これは、機能していることが知られており、一部のブラウザが気に入らない可能性があるなど、あいまいな間違いを犯さなければならない可能性をほとんど排除します。

于 2011-09-12T18:37:41.870 に答える
0

私はすべてのブラウザ用にnpruntimeを開発しました。すべてのブラウザでうまく機能しましたが、FirefoxはWindows7でのみフリーズしました。

Firefoxの設定「dom.ipc.plugins.enabled」をfalseに編集する際の問題を解決しました。うまくいくかどうかはわかりませんが、試してみる価値はあります。

于 2013-06-17T09:47:14.147 に答える