AkelPad Forum Index AkelPad
Support forum
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Scripts discussion (2)
Goto page Previous  1, 2, 3 ... 91, 92, 93, 94, 95, 96  Next
 
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins
View previous topic :: View next topic  
Author Message
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5419

PostPosted: Fri Apr 04, 2014 3:47 pm    Post subject: Reply with quote

Infocatcher wrote:
Не удается инициализировать приложение для отладки.
Инструкция по установке MS Script Editor. Требуется дистрибутив MS Office.
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 5:23 pm    Post subject: Reply with quote

Instructor
У меня оказался уже установлен некий Microsoft Script Editor 10.0 (и MS Office 2003), но там все по-другому.
Но статья натолкнула на С:\Program Files\Common Files\Microsoft Shared\VS7Debug\VS7JIT.EXE, я это дело потыкал, оно ругнулось на
Quote:
JIT Debugging
---------------------------
JIT Debugging is disabled.

To enable JIT Debugging, from Visual Studio .NET go to Tools/Options/Debugging/JIT Settings.
---------------------------
ОК

Visual Studio .NET у меня в принципе-то есть, но на эту систему я ее никогда не ставил. Smile
Я нагуглил HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings\JITDebug, выставил там 1.

Теперь из Script Editor можно прицепиться к процессу. Изначально тоже можно было, но безрезультатно. И потом надо выбрать Debug – Break All.
В общем, оно открывает работающий скрипт, можно выполнять его пошагово, но в момент падения ничего не происходит.

Падает где-то тут:
Code:
      statusbar.restore();
      if(lpFrame2) {

(галочку в списке скриптов пока что больше не проверял)

Upd:
Падает вот тут:
Code:
function Statusbar() {
   ...
   this.get = function() {
      return buffer(function(lpTextBuffer) {
         AkelPad.SendMessage(hWndStatus, _TSTR ? 1037 /*SB_GETTEXTW*/ : 1026 /*SB_GETTEXTA*/, nParts - 1, lpTextBuffer); // <---
         return AkelPad.MemRead(lpTextBuffer, _TSTR);
      });
   };


Upd #2:
Однако, если закомментировать statusbar.restore();, то все равно иногда падает. Shocked
И падает уже на
Code:
         tileTabs(lpFrame, lpFrame2, tileHorizontal, useTabsOrder);


Upd #3:
А с галочкой в самом плагине по-прежнему глухо, «Не удается инициализировать приложение для отладки».
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5419

PostPosted: Fri Apr 04, 2014 5:51 pm    Post subject: Reply with quote

Infocatcher
У меня Office XP, но Script Editor также 10.0. Находится "c:\Program Files\Microsoft Office\Office10\MSE7.EXE". Я бы "HKEY_CURRENT_USER\Software\Microsoft\Windows Script\Settings\JITDebug" вернул на 0 (по крайней мере у меня стоит 0). И надо включить через меню "Debug" в Script Editor'е "Web Debugging". Это насколько вижу и есть включение JIT, отладка в реальном времени.


Last edited by Instructor on Fri Apr 04, 2014 6:02 pm; edited 2 times in total
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 6:01 pm    Post subject: Reply with quote

Instructor
У меня вот такая версия.
Вернул в реестре как было – перестало работать вообще.
И в меню такого нет.
Плюс у меня IE9, там уже встроенный отладчик (и пунктов меню как в статье соответственно тоже нет).


Last edited by Infocatcher on Fri Apr 04, 2014 6:03 pm; edited 2 times in total
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5419

PostPosted: Fri Apr 04, 2014 6:02 pm    Post subject: Reply with quote

Можно еще галочки проверить: Картинка

Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 6:04 pm    Post subject: Reply with quote

Instructor wrote:
Находится "c:\Program Files\Microsoft Office\Office10\MSE7.EXE".
Ну да, с "c:\Program Files\Microsoft Office\OFFICE11\MSE7.EXE" я и работал.

А галочки такие же, да.
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 6:10 pm    Post subject: Reply with quote

В общем, что-то ведь у меня заработало.
Но, я так понимаю, не видать значения переменных из текущей области видимости. Или и не должно? Странный тогда отладчик. Smile
И в момент падения курсор просто остается на той строке, где произошло падение – никакой дополнительной информации не видно.

P.S. На всякий случай: в моем изначальном сообщении есть несколько дополнений.
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5419

PostPosted: Fri Apr 04, 2014 6:34 pm    Post subject: Reply with quote

После всяких галко нажатий и "vs7jit.exe -RegServer" "vs7jit.exe -UnRegServer" у меня JITDebug стало 1 Smile

Infocatcher wrote:
Но, я так понимаю, не видать значения переменных из текущей области видимости. Или и не должно?
Должно. Debug -> Windows -> Locals

Можно еще проверить записи реестра (Office10 <-> Office11).
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{000C1217-0000-0000-C000-000000000046}\LocalServer32]
@="C:\\Program Files\\Microsoft Office\\Office10\\MSE7.EXE /JITDebug"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Machine Debug Manager\JITDebugging\Engines\{F200A7E7-DEA5-11D0-B854-00A0244A1DE2}]
@="Script Only"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Machine Debug Manager\JITDebugging\Engines\{F200A7E7-DEA5-11D0-B854-00A0244A1DE2}\{000C1217-0000-0000-C000-000000000046}]
@=""
"Remote"=dword:00000001


Возможно и это:
Code:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\AD7Metrics\Engine\{F200A7E7-DEA5-11D0-B854-00A0244A1DE2}]
"Name"="Script"
"CLSID"="{56B4E602-21A1-11D2-8FD6-00C04FA30000}"
"AlwaysLoadLocal"=dword:00000001
"Attach"=dword:00000001
"ConditionalBP"=dword:00000001
"FunctionBP"=dword:00000001
"HitCountBP"=dword:00000001
"JITDebug"=dword:00000001
"PortSupplier"="{708C1ECA-FF48-11D2-904F-00C04FA302A1}"
"SetNextStatement"=dword:00000001
"SuspendThread"=dword:00000001

[HKEY_CLASSES_ROOT\CLSID\{56B4E602-21A1-11D2-8FD6-00C04FA30000}]
@="Script LE"

[HKEY_CLASSES_ROOT\CLSID\{56B4E602-21A1-11D2-8FD6-00C04FA30000}\InprocServer32]
@="C:\\Program Files\\Microsoft Office\\Office10\\VS Runtime\\scriptle2.dll"
"ThreadingModel"="Apartment"

[HKEY_CLASSES_ROOT\CLSID\{56B4E602-21A1-11D2-8FD6-00C04FA30000}\ProgID]
@="ScriptDebugEngine.7"
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 6:47 pm    Post subject: Reply with quote

Instructor wrote:
Должно. Debug -> Windows -> Locals
Ой, и правда. Пропустил как-то. Smile

Сейчас проверил еще раз – снова дошло до
Code:
         AkelPad.SendMessage(hWndStatus, _TSTR ? 1037 /*SB_GETTEXTW*/ : 1026 /*SB_GETTEXTA*/, nParts - 1, lpTextBuffer);

Quote:
lpTextBuffer 64674088 Number

Подробностей я так и не вижу. В стеке вызовов – только анонимные js-функции, которые я и так пошагово прошел.
И висит окошко
Quote:
[Window Title]
AkelPad (x86) text editor

[Main Instruction]
Программа "AkelPad (x86) text editor" не работает

[Content]
Возникшая проблема привела к прекращению работы программы. Windows закроет эту программу, а если есть известный способ устранения проблемы, уведомит вас об этом.

[Закрыть программу]

Если его закрыть, то AkelPad закроется и документ с кодом скрипта из отладчика пропадет.


По ключам есть вот такое:
Quote:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{000C1227-0000-0000-C000-000000000046}\LocalServer32]
@="C:\\Program Files\\Microsoft Office\\OFFICE11\\MSE7.EXE /JITDebug"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Machine Debug Manager\JITDebugging\Engines\{F200A7E7-DEA5-11D0-B854-00A0244A1DE2}]
@="Script Only"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Machine Debug Manager\JITDebugging\Engines\{F200A7E7-DEA5-11D0-B854-00A0244A1DE2}\{000C1227-0000-0000-C000-000000000046}]
@=""
"Remote"=dword:00000001
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5419

PostPosted: Fri Apr 04, 2014 6:50 pm    Post subject: Reply with quote

Infocatcher
Что, если сделать переменную lpTextBuffer глобальной?
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 7:03 pm    Post subject: Reply with quote

Instructor wrote:
Возможно и это

Кажется, все то же самое, только OFFICE11 в пути про InprocServer32.

Instructor wrote:
Что, если сделать переменную lpTextBuffer глобальной?

Сделал
Code:
var lpTextBuffer;
function Statusbar() {
   this.get = this.set = this.save = this.restore = function() {};

   // Based on Instructor's code: http://akelpad.sourceforge.net/forum/viewtopic.php?p=13656#13656
   var hWndStatus = oSys.Call("user32::GetDlgItem", hMainWnd, 10002 /*ID_STATUS*/);
   if(!hWndStatus || !oSys.Call("user32::IsWindowVisible", hWndStatus))
      return;
   var nParts = AkelPad.SendMessage(hWndStatus, 1030 /*SB_GETPARTS*/, 0, 0);
   if(nParts <= 5)
      return;
   var _origStatus, _customStatus;
   var _this = this;
   function buffer(callback) {
      /*var */lpTextBuffer = AkelPad.MemAlloc(1024 * _TSIZE);
      if(lpTextBuffer) {
         var ret = callback.call(_this, lpTextBuffer);
         AkelPad.MemFree(lpTextBuffer);
         return ret;
      }
      return undefined;
   }
   this.get = function() {
      return buffer(function(/*lpTextBuffer*/) {
         AkelPad.SendMessage(hWndStatus, _TSTR ? 1037 /*SB_GETTEXTW*/ : 1026 /*SB_GETTEXTA*/, nParts - 1, lpTextBuffer);
         return AkelPad.MemRead(lpTextBuffer, _TSTR);
      });
   };
   this.set = function(pStatusText) {
      buffer(function(/*lpTextBuffer*/) {
         _customStatus = pStatusText;
         AkelPad.MemCopy(lpTextBuffer, pStatusText, _TSTR);
         AkelPad.SendMessage(hWndStatus, _TSTR ? 1035 /*SB_SETTEXTW*/ : 1025 /*SB_SETTEXTA*/, nParts - 1, lpTextBuffer);
      });
   };
   this.save = function() {
      _origStatus = this.get();
   };
   this.restore = function() {
      if(_origStatus != undefined && this.get() == _customStatus)
         this.set(_origStatus);
   };
}

Все равно периодически падает.
Причем, кажется, чаще падает после открытия новой вкладки, чем после выбора существующей.

Упало в том же месте, на
Code:
AkelPad.SendMessage(hWndStatus, _TSTR ? 1037 /*SB_GETTEXTW*/ : 1026 /*SB_GETTEXTA*/, nParts - 1, lpTextBuffer);

Только теперь lpTextBuffer в locals не показывается... Но раз падает не каждый раз, то с ним должно бы быть все в порядке. Confused
Back to top
View user's profile Send private message Visit poster's website
Instructor
Site Admin


Joined: 06 Jul 2006
Posts: 5419

PostPosted: Fri Apr 04, 2014 7:23 pm    Post subject: Reply with quote

Уточню, что под глобальной подразумевалось - всю строку в начало скрипта
Code:
var oSys = AkelPad.SystemFunction();
var lpTextBuffer = AkelPad.MemAlloc(1024 * _TSIZE);

А "AkelPad.MemFree(lpTextBuffer);" на время тестов можно закомментировать.

Добавлено:
Еще попытка разобраться с JIT'ом. GUID используемые Scripts плагином:
Scripts source wrote:
#ifdef _WIN64
//{56B9FC1C-63A9-4CC1-AC21-087D69A17FAB}
DEFINE_GUID(IID_IProcessDebugManager, 0x56b9fc1c, 0x63a9, 0x4cc1, 0xac, 0x21, 0x08, 0x7d, 0x69, 0xa1, 0x7f, 0xab);
#else
//{51973C2f-CB0C-11d0-B5C9-00A0244A0E7A}
DEFINE_GUID(IID_IProcessDebugManager, 0x51973C2f, 0xCB0C, 0x11d0, 0xb5, 0xc9, 0x00, 0xa0, 0x24, 0x4a, 0x0e, 0x7a);
#endif

//{78A51822-51F4-11D0-8F20-00805F2CD064}
DEFINE_GUID(CLSID_ProcessDebugManager, 0x78a51822, 0x51f4, 0x11d0, 0x8f, 0x20, 0x0, 0x80, 0x5f, 0x2c, 0xd0, 0x64);


На WinXP x86:
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{78A51822-51F4-11D0-8F20-00805F2CD064}]
@="ProcessDebugManager Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{78A51822-51F4-11D0-8F20-00805F2CD064}\InprocServer32]
@="D:\\Program Files\\Common Files\\Microsoft Shared\\VS7Debug\\pdm.dll"
"ThreadingModel"="Both"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{78A51822-51F4-11D0-8F20-00805F2CD064}\ProgID]
@="ProcessDebugManager.7"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{78A51822-51F4-11D0-8F20-00805F2CD064}\VersionIndependentProgID]
@="ProcessDebugManger"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ProcessDebugManager.7\CLSID]
@="{78A51822-51F4-11D0-8F20-00805F2CD064}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ProcessDebugManager\CLSID]
@="{78A51822-51F4-11D0-8F20-00805F2CD064}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{51973C2F-CB0C-11D0-B5C9-00A0244A0E7A}]
@="IProcessDebugManager"
Back to top
View user's profile Send private message Send e-mail
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 7:45 pm    Post subject: Reply with quote

Instructor
Стало так
Code:
var hMainWnd = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();
var lpTextBuffer = AkelPad.MemAlloc(1024 * _TSIZE); //~

...

function Statusbar() {
   this.get = this.set = this.save = this.restore = function() {};

   // Based on Instructor's code: http://akelpad.sourceforge.net/forum/viewtopic.php?p=13656#13656
   var hWndStatus = oSys.Call("user32::GetDlgItem", hMainWnd, 10002 /*ID_STATUS*/);
   if(!hWndStatus || !oSys.Call("user32::IsWindowVisible", hWndStatus))
      return;
   var nParts = AkelPad.SendMessage(hWndStatus, 1030 /*SB_GETPARTS*/, 0, 0);
   if(nParts <= 5)
      return;
   var _origStatus, _customStatus;
   var _this = this;
   function buffer(callback) {
      //var lpTextBuffer = AkelPad.MemAlloc(1024 * _TSIZE);
      if(lpTextBuffer) {
         var ret = callback.call(_this, lpTextBuffer);
         //~ AkelPad.MemFree(lpTextBuffer);
         return ret;
      }
      return undefined;
   }
   this.get = function() {
      return buffer(function(/*lpTextBuffer*/) {
         AkelPad.SendMessage(hWndStatus, _TSTR ? 1037 /*SB_GETTEXTW*/ : 1026 /*SB_GETTEXTA*/, nParts - 1, lpTextBuffer);
         return AkelPad.MemRead(lpTextBuffer, _TSTR);
      });
   };
   this.set = function(pStatusText) {
      buffer(function(/*lpTextBuffer*/) {
         _customStatus = pStatusText;
         AkelPad.MemCopy(lpTextBuffer, pStatusText, _TSTR);
         AkelPad.SendMessage(hWndStatus, _TSTR ? 1035 /*SB_SETTEXTW*/ : 1025 /*SB_SETTEXTA*/, nParts - 1, lpTextBuffer);
      });
   };
   this.save = function() {
      _origStatus = this.get();
   };
   this.restore = function() {
      if(_origStatus != undefined && this.get() == _customStatus)
         this.set(_origStatus);
   };
}
, упало точно там же...
Меня другое смущает:
Я wrote:
Однако, если закомментировать statusbar.restore();, то все равно иногда падает.
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 7:52 pm    Post subject: Reply with quote

Quote:
На WinXP x86:

Все, кроме вот этого
Code:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{51973C2F-CB0C-11D0-B5C9-00A0244A0E7A}]
@="IProcessDebugManager"

у меня в наличии. Confused

Upd:
А поиск по «DebugManager» в «HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface» находит только вот такое
Code:

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{51973C2C-CB0C-11D0-B5C9-00A0244A0E7A}   (По умолчанию)   IMachineDebugManager
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{51973C2D-CB0C-11D0-B5C9-00A0244A0E7A}   (По умолчанию)   IMachineDebugManagerCookie
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{51973C2E-CB0C-11D0-B5C9-00A0244A0E7A}   (По умолчанию)   IMachineDebugManagerEvents
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{C980E8E2-5DD3-4310-868F-59AF24A92327}   (По умолчанию)   IMachineDebugManagerCookieEx
.
Back to top
View user's profile Send private message Visit poster's website
Infocatcher



Joined: 06 Aug 2007
Posts: 1631

PostPosted: Fri Apr 04, 2014 10:10 pm    Post subject: Reply with quote

Infocatcher wrote:
Меня другое смущает:
Я wrote:
Однако, если закомментировать statusbar.restore();, то все равно иногда падает.

И падает снова при отправке сообщения:
Code:
   var hWndMdi  = AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 1 /*FI_WNDEDITPARENT*/, lpFrame);

Более того, я воткнул перед этим вызовом
Code:
   var test = AkelPad.SendMessage(hMainWnd, 1319 /*AKD_UNIQUEID*/, 0, 0);

И на нем тоже упало, хотя это сообщение на используемой версии AkelPad'а не должно обрабатываться.

Upd:
Хоть какая-то польза: исправил утечку памяти. Падать, впрочем, не перестало. Я даже на всякий случай проверил без
Code:
CmdLineBegin=/Call("Scripts::Main", 1, "autoSaveSession.js", "-debug=false")
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   This topic is locked: you cannot edit posts or make replies.    AkelPad Forum Index -> Plugins All times are GMT
Goto page Previous  1, 2, 3 ... 91, 92, 93, 94, 95, 96  Next
Page 92 of 96

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


SourceForge.net Logo Powered by phpBB © 2001, 2005 phpBB Group