NPAPI插件开发详细记录:插件的调试

这里归纳一下我知道的在插件开发中使用的几种调试手段。

附加到进程

之前也提及过关于插件的调试,这里需要补充一点关于在chrome中调试插件的内容,在chrome中运行插件时,插件的进程也是chrome.exe,因此要准确的找到正确的插件进程可以为chrome添加启动参数--plugin-startup-dialog,如图:


当chrome加载插件时,就会弹出对话框:


如果用其他浏览器进行调试,也只需要找到加载插件的进程就可以了,这种方法的具体步骤请参考: 插件调试

弹出对话框


       由于插件是一个dll,无法直接跟踪代码,除了前述方式之外,我们采用的较多的方式是弹出消息框的方式,这与一般的程序使用printf输出调试信息是类似的,不过这种方式只适合在较少的位置添加,消息框太多会导致调试过程更加难受的。

       一般开发windows上的插件都会包含windows.h和tchar.h等几个头文件,因此在插件中一般只需要直接调用MessageBox,较常用的方式是:MessageBox(NUL,_T(“THE MSG TO SHOW”),_T(“TITLE”),0);

        这种方式不好,但当你的插件加载时就崩溃了的话,根本无法采用附加到进程的方式来调试插件,此时可以在几个关键位置添加消息框来定位bug。
在windows平台还有一种方式可以替代弹消息框,那就是利用OutputDebugString。

利用OutputDebugString输出调试信息


        在WinBase.h中定义了OutputDebugString,在代码中添加OutputDebugString(_T(“THE MSG TO OUTPUT”));在插件运行的过程中,如果执行到这些代码,即可利用Dbgview.exe(需要的请自行在网上搜索下载)来查看输出的信息。
        为了方便使用,可以在头文件中添加调用OutputDebugString的代码,举例来说,我可以在npfrmwk.h中添加如下代码:

  1. void inline NP_OUTPUT_DBG_STRING(string str)  
  2. {  
  3. #if defined(XP_WIN) && defined(_DEBUG)  
  4.     OutputDebugString(str.c_str());  
  5. #endif  
  6. }  
       注意,这里使用了inline,如果不使用inline,则需要在头文件中添加函数声明,在cpp文件中加以实现。建议设计为inline方式。
       还可以进一步对该函数进行重载以支持更多参数和参数类型,当然还可以参考printf,做成可以格式化输出的形式,具体可以在网上搜索,我用模板实现了一个接收单一参数的函数:
  1. template <typename T>  
  2. void NP_OUTPUT_DBG_STRING(T t)  
  3. {  
  4. #ifdef _DEBUG  
  5.     std::stringstream ss;  
  6.     ss<<t;  
  7.     NP_OUTPUT_DBG_STRING(ss.str());  
  8. #endif  
  9. }  

       这样则可以接收任何基本数据类型和具有<<操作符的复杂操作类型,我没有去实现接受多个参数的形式,因为在使用的时候可以多次调用来输出多个调试信息。由于使用了#ifdef _DEBUG预编译指令,因此只有在debug版才会输出信息,release版就不会进行输出了。

原文转载自 http://blog.csdn.net/z6482/article/details/22989019#t1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值