![]() |
#9 |
Участник
|
Нет, речь о p-code.
Запускаем такой джоб X++: static void Job144(Args _args) { void someMethod() { callStack2infolog(); } ; ttsBegin; // здесь в Application запоминается время начала someMethod(); // а здесь мы легко получаем стек вызовов и запоминаем его в глобальной переменной, которую чистим по завершении транзакции // нам же необязательно получить стек при начале или конце транзакции. Главное локализовать участки кода. // это попытка хоть как-то обойти потерю стека вызовов ядром при пересечении ttsBegin / ttsCommit ttsCommit; // здесь в Application запоминается время конца и идет запись времени в лог вместе со стеком вызовов } X++: // подняли из ax3.0 #localmacro.ClientPrefix "(C)" #endmacro #localmacro.ServerPrefix "(S)" #endmacro #define.PathPrefixLen (4) static void callStack2infolog( str _prefix = "", // "@SYS65092", Counter _skipLevels = 0, /* container stack = xSession::xppCallStack() //pkoz 18.02.2014 */ container stack = Stack_MRC::xppCallStack(0) ) { // container stack = xSession::xppCallStack(); TreeNodePath correctPath; TreeNodePath stackPath; Counter n; int line; ; setPrefix(_prefix); if (_skipLevels < 0) { _skipLevels = 0; } for (n = 3 + _skipLevels * 2; n <= conLen(stack); n += 2) { stackPath = conPeek(stack,n); line = conPeek(stack,n+1); correctPath = stackPath; if (line) { if ( subStr(stackPath, 1, #PathPrefixLen) == #ClientPrefix || subStr(stackPath, 1, #PathPrefixLen) == #ServerPrefix ) { correctPath = subStr(stackPath, #PathPrefixLen + 1, maxInt()); } info(strFmt("%1 %2", stackPath, line),'', SysInfoAction_Editor::newLineColumn(correctPath, line)); } else { info(strFmt("%1", stackPath),'', SysInfoAction_Editor::newLineColumn(correctPath, 1)); } } } Цитата:
(C)\Classes\Global\callStack2infolog 6
(C)\Jobs\Job144 5 а если запустить такой джоб X++: static void Job145(Args _args) { ttsBegin; ttsCommit; } \Classes\Application\ttsNotifyPostBegin такой код X++: public void ttsNotifyPostBegin() { ; if (curUserId() == "pkoz") { callStack2infolog(); } super(); ... } Цитата:
(S)\Classes\Global\callStack2infolog 6
(S)\Classes\Application\ttsNotifyPostBegin 11 Последний раз редактировалось Logger; 19.03.2021 в 11:46. |
|
Теги |
stack trace, стек вызовов |
|
|