在線代碼編譯
A. 網站源代碼如何在線進行調試
開發調試環境: Ubuntu 14.10,openJdk 1.7,Android Studio 1.0.2,android-5.0.1_r1源碼
由於AS是基於IntelliJ IDEA開發的,所以本文也適用於IntelliJ IDEA
一、修改Android Studio(以下簡稱AS)的內存配置
因為在導入源碼時需要消耗大量內存,所以先修改IDEA_HOME/bin/studio64.vmoptions(x86的機器修改studio.vmoptions)中-Xms和-Xmx的值。文檔中使用的是748m, 可自行修改。
二、配置AS的JDK、SDK
在IDE中添加一個沒有classpath的JDK, 這樣可以確保使用源碼里的庫文件
並將其作為要使用的SDK的java SDK。如下圖
三、生成導入AS所需配置文件(*.ipr)
①編譯源碼(為了確保生成了.java文件,如R.java;如果編譯過,則無需再次編譯)
②檢查out/host/linux-x86/framework/目錄下是否有idegen.jar
如果idegen.jar不存在,執行:
mmm development/tools/idegen/
在5.0.1的源碼中會生成res.java的文件夾,導致idegen.jar運行時拋FileNotFoundException,這是idegen的代碼不夠嚴謹造成的。
我的分享里有修改這個bug的patch,或者直接使用我分享的idegen.jar。
③執行
development/tools/idegen/idegen.sh
等待出現類似下面的結果:
Read excludes: 5ms
Traversed tree: 44078ms
這時會在源碼的根目錄下生成android.ipr和android.iml兩個IntelliJ IDEA(AS是基於IntelliJ IDEA社區版開發的)的配置文件
Tips:
AS在導入代碼時比較慢,建議先修改android.iml,將自己用不到的代碼exclude出去.可以仿照過濾.repo文件夾的語法,如:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
這樣在導入時就會跳過abi和art文件夾.過濾的越多,AS的處理速度就會越快.
④在AS中打開源碼根目錄下新生成的android.ipr
如果在導入時AS出現
則建議按照其給定的解決方法來解決(網址:http://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit),具體內容如下圖:
四、解決源碼中跳轉錯誤問題
①為當前工程設置正確的SDK和JDK
②設置'Moles'的依賴
先將所有依賴刪掉,只留下上圖'1'所指向的兩個(注意:這里刪除全部只是為了方便。如果確實用到了.jar,在將它們的路徑添加進來就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
點擊上圖中'2'指向的'+'並選擇上圖'3'指向的'Jars or directories'選項,依次將frameworks和external文件夾添加進來.如:
其它版本的代碼在添加frameworks時可能會顯示成:
沒有關系,只是顯示問題,點擊OK還是會把frameworks路徑添加進去的.
如果還有代碼跳轉錯誤,請仿照上面的步驟將相應代碼的路徑或jar文件添加到其Dependencies標簽頁中即可.
五、DEBUG源碼
我們可以通過給剛導入的工程在'Moles'中添加'Android Framework'來讓AS將它作為一個Android工程,從而方便我們調試代碼.
可以按照上圖中'1'和'2'來添加Android Framework支持.
在代碼中加斷點,然後選擇'Run'->'Attach debugger to Android process'或者直接點擊下圖所示的圖標
在彈出的選擇進程(Choose Process)對話框中,勾選顯示所有進程,選擇要DEBUG的代碼所在的進程,點擊OK即可.
六、其它
代碼中很多地方提示Call requires API Level x.... 出現這個問題是因為AS將我們的工程當做安卓應用程序工程了,且源碼中沒有指定minSdkVersion.
我們只需在源碼根目錄加一個聲明minSdkVersion的AndroidManifest.xml文件即可(分享了一個AndroidManifest.xml)。
也可以考慮使用build.gradle來解決該問題。
B. 如何實現在線編譯調試代碼
就是執行shell命令進行編譯運行等操作。
看看這里:
http://www.php.net/manual/zh/ref.exec.php
溫馨提示:代碼有風險,編譯需謹慎。做好過濾邏輯以免使得服務掛掉。
C. 這里的在線編輯器為什麼不能即時編輯,連代碼都露著
貌似教研室或者discuz禁止了,你看一下右邊的「附加選項」,如果html能點擊,那就可以正常狀態編輯,不能的話只能像現在這樣編輯。
D. 在線python代碼編輯器怎麼實現
僅僅是思路,其實網上肯定可以找到現成的代碼:
把上傳的代碼放在某個位置
用模板重新生成main,其中包括導入用戶的文件
執行python命令運行main,並把輸出和錯誤信息重定向到文件
監控進程結束,記錄時間和分析輸出
E. 如何在線編輯js源碼調試
使用火狐瀏覽器。安裝firebug。
安裝後,按F12,打開firebug
找到腳本,啟用腳本。
找到要調試的JS文件
在需要斷點的地方,滑鼠點下左側
會出現一個紅點
執行到這里的時候,就會進行調試了
F. 好的學習HTML的網站,最好是可以在線編輯代碼的。
http://www.w3school.com.cn/
G. 用伺服器做在線編譯器
如果是針對傳統使用方法的編程語言實現一個的話涉及的內容很雜,包括:
Web伺服器+Web伺服器與後端程序交互的組件(這個可以用現成的,我用的是nginx+FCGI)
後端程序
後端核心就是一個類似調用系統給的類似execl的API執行一下對應編譯工具,用這個API時還得精心處理一下管道,把輸出內容導出來顯示回網頁。
但是因為這類程序和OJ一樣,是網路上的公共服務而且居然還允許用戶上傳代碼編譯執行,所以問題主要集中在安全處理上,而且安全問題的處理高度依賴操作系統。
以Linux為例,安全方麵包括但不僅包括以下內容:
依賴環境構建、沙盒
運行身份,包括GID、UID
資源限制,包括socket、文件操作、核心轉儲大小、文件數、子進程數等等
syscall限制
執行時間限制,包括運行時間和CPU時間
文件系統壓力
Windows下是另一堆問題要解決,比Linux復雜得多(也許是我不太會用Windows)。
我認識一人,自己實現了一個類似Haskell的東西,有和Go Playground差不多的在線運行網頁,我問他怎麼那麼快把那麼多東西都搞完了,他說,「整個語言就是用JS實現的,所以有瀏覽器就能運行,不需要後端」,這也是一種思路。
天互數據
H. 前端常用的幾種在線代碼編輯器各有什麼優勢
前端常用的幾種在線代碼編輯器各有什麼優勢
JS Bin - Collaborative JavaScript Debugging
介紹一款在線編輯器:jsbin jsbin的用法
優點:不需要登錄,即發即預覽
缺點:速度不靠譜
RunJS - 在線編輯、展示、分享、交流你的 JavaScript 代碼
優點:國內訪問速度快,可以上傳圖片(左下角)
缺點:需要登錄,用戶名
Create a new fiddle
優點:功能強大,歷史記錄給力,缺點:訪問速度慢
I. 如何用java調用c語言編譯器實現在線編譯c語
要在java中調用c語言的庫,需要使用Java提供了JNI。
舉例說明
在c語言中定義一個 void sayHello()函數(列印Hello World);然後在Java中調用這個函數顯示Hello Word.
現在分別從Java和C語言兩部分說明:
1. Java 部分
首先定義一個HelloNative,在其中申明sayHello函數,函數要申明為Native 類型的.如下:
public class HelloNative {
public native void sayHello();
}
編譯這個類,生成class文件:
javac HelloWorld.java
利用javah生成需要的h文件
javah HelloNative
生成的 h文件大概如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
可以看一下上面自動生成的程序,程序include了jni.h,這個頭文件在 $JAVA_HOME下的include文件夾下. 還可以發現生成的函數名是在之前的函數名前面加上了Java_HelloNative。
2. C語言部分
根據上面生成的h文件編寫相應的代碼實現,建立一個 HelloNative.cpp用來實現顯示Hello World的函數.如下:
#include <stdio.h>
#include "HelloNative.h"
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
printf("Hello World!\n");
}
代碼編寫完成之後,我們再用gcc編譯成庫文件,命令如下;
gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp
這樣就會在當前目錄下生成一個libHelloNative.so的庫文件.這時需要的庫已經生成,在C語言下的工作已經完成了.
接下來需要在Java中編寫一個程序測試一下.在程序前,需要將我們的庫載入進去.載入的方法是調用Java的 System.loadLibrary("HelloNative");
public class TestNative
{
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError e) {
System.out.println( "Cannot load hello library:\n " + e.toString() );
}
}
public static void main(String[] args) {
HelloNative test = new HelloNative();
test.sayHello();
}
}
但是再編譯後,運行的時候,問題又出現了.
Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)
載入庫失敗,但是庫明明就是放在當前文件夾下的,怎麼會載入失敗呢?
用System.getProperty("java.library.path")查看,發現java.library.path中並不u存在當前的目錄.主要有以下的幾個解決辦法:
1) 將生成的庫復制到java.library.path有的路徑中去,當然這樣不是很好
2) 設置環境變數export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,將當前的目錄加入到LD_LIBRARY_PATH中
3) 設置java 的選項,將當前的目錄加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH
這樣之後程序就能夠成功的運行了.可以看見顯示的"Hello World!"了
J. 如何在線編輯代碼
如何在線編輯代碼
網站首頁html代碼方法/步驟:
找到FTP賬號密碼,鏈接伺服器空間;
查找首頁代碼文件;
修改網站代碼文件,若不支持在線修改,可下載代碼文件進行修改,修改後上傳覆蓋即可。
網站首頁的HTML代碼,是打開網站的第一個頁面裡麵包含的代碼。
一般來說,這個文件會以index.htm,index.html ,index.asp,index.php等命名。要修改它,先要通過PTF進入網站空間伺服器,找到首頁代碼的文件,同時也是需要您修改那個文件代碼的許可權。