在unity中,一般都會自己手動封裝一次日誌,或者自定義一些日誌輸出,比如lua**的日誌輸出,雙擊開啟時我們希望重新定向的其他的檔案,而不是封裝**裡,這裡要用到的主要是[onopenassetattribute(0)],每次檔案開啟時,先執行自定義的**,**裡自己重定向檔案和行數,然後再選擇開啟。對於unity控制台,我們還要用反射取得對應的日誌內容。
直接上**,使用時直接修改logcsname變數,將自己封裝的日誌類寫入即可。
using system.reflection;
using unityeditor;
using system;
using unityeditor.callbacks;
public
class logredirect
fieldinfo listviewfieldinfo = consolewindowtype.getfield("m_listview", bindingflags.instance | bindingflags.nonpublic);
loglistview = listviewfieldinfo.getvalue(consolewindow);
loglistviewcurrentrow = listviewfieldinfo.fieldtype.getfield("row", bindingflags.instance | bindingflags.public);
type logentriestype = unityeditorassembly.gettype("unityeditorinternal.logentries");
logentriesgetentry = logentriestype.getmethod("getentryinternal", bindingflags.static | bindingflags.public);
type logentrytype = unityeditorassembly.gettype("unityeditorinternal.logentry");
logentry = activator.createinstance(logentrytype);
logentrycondition = logentrytype.getfield("condition", bindingflags.instance | bindingflags.public);
}return
true;
}private
static
string
getlistviewrowcount(ref
int line)
);string condition = logentrycondition.getvalue(logentry) as
string;
int index = condition.indexof(logcsname);
if(index < 0)//不是經過我們封裝的日誌
int lineindex = condition.indexof(")", index);
condition = condition.substring(lineindex + 2);
index = condition.indexof(".cs:");
if (index >= 0)
return
null;
}[onopenassetattribute(0)]
public
static
bool
onopenasset(int instanceid, int line)
if (openinstanceid == instanceid && openline == line)
openinstanceid = instanceid;
openline = line;
if (!getconsolewindowlistview())
string filename = getlistviewrowcount(ref line);
if (filename == null)
if (filename.endswith(".cs"))}}
return
false;
}}
控制台重定向stdout stderr
通常,乙個控制台 命令提示符 應用程式或命令的輸出將傳送到兩個單獨的流.常規的輸出傳送到標準出 stdout 並將錯誤訊息傳送到標準錯誤 stderr 當你重定向控制台輸出使用 符號,只重定向標準輸出.要重定向stderr,必須指定 2 的重定向符號.這將選擇第二個輸出流stderr。kill hu...
控制台輸出重定向到Memo
函式runcmd void fastcall tform1 runcmd ansistring cmdline,tstrings result else createpipe hreadpipe,hwritepipe,null,1024 screen cursor crhourglass try d...
控制台輸入輸出重定向
一般來講gui程式不能使用stdin和stdout,但是有時有些特殊需要,希望gui程式也有控制台,如 乙個程式,既可以以gui方式執行,又可以如果使用者在控制台裡打程式名的話,就以控制台程式的方式執行。通過allocconsole 和 attachconsole 這兩個win api就能實現上面的...