導航:首頁 > 程序命令 > 程序員問題定位

程序員問題定位

發布時間:2022-08-11 18:01:46

㈠ 如何定位android NDK開發中遇到的錯誤

如何定位Android NDK開發中遇到的錯誤

Android NDK中的錯誤定位對很多開發者來說是一件頭疼的事,本文通過一個Demo程序詳細講解了NDK的錯誤是如何產生的,以及如何通過命令行工具定位NDK的問題所在。

Android NDK是什麼?
Android NDK 是在SDK前面又加上了「原生」二字,即Native Development Kit,因此又被Google稱為「NDK」。眾所周知,Android程序運行在Dalvik虛擬機中,NDK允許用戶使用類似C / C++之類的原生代碼語言執行部分程序。NDK包括:

從C / C++生成原生代碼庫所需要的工具和build files;
將一致的原生庫嵌入可以在Android設備上部署的應用程序包文件(application packages files ,即.apk文件)中;
支持所有未來Android平台的一系列原生系統頭文件和庫。
為何要用到NDK?概括來說主要分為以下幾種情況:

代碼保護,由於APK的java層代碼很容易被反編譯,而C/C++庫反匯難度較大;
在NDK中調用第三方C/C++庫,因為大部分的開源庫都是用C/C++代碼編寫的;
便於移植,用C/C++寫的庫可以方便地在其他的嵌入式平台上再次使用。
Android JNI與NDK的關系
Java Native Interface(JNI)標準是Java平台的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI是本地編程介面,它使得在Java虛擬機(VM)內部運行的Java代碼能夠與用其它編程語言(如C、C++和匯編語言)編寫的應用程序和庫進行交互操作。

簡單來說,可以認為NDK就是能夠方便快捷開發.so文件的工具。JNI的過程比較復雜,生成.so需要大量操作,而NDK的作用則是簡化了這個過程。

哪些常見的NDK類型異常會導致程序Crash?
NDK編譯生成的.so文件作為程序的一部分,在運行發生異常時同樣會造成程序崩潰。不同於Java代碼異常造成的程序崩潰,在NDK的異常發生時,程序在Android設備上都會立即退出,即通常所說的閃退,而不會彈出「程序xxx無響應,是否立即關閉」之類的提示框。

NDK是使用C/C++來進行開發的,熟悉C/C++的程序員都知道,指針和內存管理是最重要也是最容易出問題的地方,稍有不慎就會遇到諸如內存無效訪問、無效對象、內存泄露、堆棧溢出等常見的問題,最後都是同一個結果:程序崩潰。例如我們常說的空指針錯誤,就是當一個內存指針被置為空(NULL)之後再次對其進行訪問;另外一個經常出現的錯誤是,在程序的某個位置釋放了某個內存空間,而後在程序的其他位置試圖訪問該內存地址,這就會產生無效地址錯誤。常見的錯誤類型如下:

初始化錯誤;
訪問錯誤;
內存泄露;
參數錯誤;
堆棧溢出;
類型轉換錯誤;
數字除0錯誤。
如何發現並解決NDK錯誤?
利用Android NDK開發本地應用時,幾乎所有的程序員都遇到過程序崩潰的問題,但它的崩潰會在logcat中列印一堆看起來類似天書的堆棧信息,讓人舉足無措。單靠添加一行行的列印信息來定位錯誤代碼做在的行數,無疑是一件令人崩潰的事情。在網上搜索「Android NDK崩潰」,可以搜索到很多文章來介紹如何通過Android提供的工具來查找和定位NDK的錯誤,但大都晦澀難懂。下面以一個實際的例子來說明,如何通過兩種不同的方法,來定位錯誤的函數名和代碼行。

首先,來看看我們在hello-jni程序的代碼中做了什麼(有關如何創建或導入工程,此處略),下面代碼中:在JNI_OnLoad()的函數中,即so載入時,調用willCrash()函數,而在willCrash()函數中, std::string的這種賦值方法會產生一個空指針錯誤。這樣,在hello-jni程序載入時就會閃退。我們記一下這兩個行數:在61行調用了willCrash()函數;在69行發生了崩潰。

下面我們來看看發生崩潰(閃退)時系統列印的logcat日誌:

如果你看過logcat列印的NDK錯誤的日誌就會知道,我省略了後面很多的內容,很多人看到這么多密密麻麻的日誌就已經頭暈腦脹了,即使是很多資深的Android開發者,在面對NDK日誌時也大都默默地選擇了無視。

其實,只要你細心的查看,再配合Google 提供的工具,完全可以快速地准確定位出錯的代碼位置,這個工作我們稱之為「符號化」。需要注意的是,如果要對NDK錯誤進行符號化的工作,需要保留編譯過程中產生的包含符號表的so文件,這些文件一般保存在$PROJECT_PATH/obj/local/目錄下。

第一種方法:ndk-stack

這個命令行工具包含在NDK工具的安裝目錄,和ndk-build及其他常用的一些NDK命令放在一起,比如在我的電腦上,其位置是/android-ndk-r9d/ndk-stack。根據Google官方文檔,NDK從r6版本開始提供ndk-stack命令,如果你用的之前的版本,建議還是盡快升級至最新的版本。使用ndk –stack命令也有兩種方式

實時分析日誌

在運行程序的同時,使用adb獲取logcat日誌,並通過管道符輸出給ndk-stack,同時需要指定包含符號表的so文件位置;如果你的程序包含了多種CPU架構,在這里需求根據錯誤發生時的手機CPU類型,選擇不同的CPU架構目錄,如:

當崩潰發生時,會得到如下的信息:

我們重點看一下#03和#04,這兩行都是在我們自己生成的libhello-jni.so中的報錯信息,因此會發現如下關鍵信息:

回想一下我們的代碼,在JNI_OnLoad()函數中(第61行),我們調用了willCrash()函數;在willCrash()函數中(第69行),我們製造了一個錯誤。這些信息都被准確無誤的提取了出來!是不是非常簡單?

先獲取日誌再分析

這種方法其實和上面的方法沒有什麼大的區別,僅僅是logcat日誌獲取的方式不同。可以在程序運行的過程中將logcat日誌保存到一個文件,甚至可以在崩潰發生時,快速的將logcat日誌保存起來,然後再進行分析,比上面的方法稍微靈活一點,而且日誌可以留待以後繼續分析。

第二種方法:使用addr2line和objmp命令

這個方法適用於那些不滿足於上述ndk-stack的簡單用法,而喜歡刨根問底的程序員們,這兩個方法可以揭示ndk-stack命令的工作原理是什麼,盡管用起來稍微麻煩一點,但可以稍稍滿足一下程序員的好奇心。

先簡單說一下這兩個命令,在絕大部分的linux發行版本中都能找到他們,如果你的操作系統是Linux,而你測試手機使用的是Intel x86系列,那麼你使用系統中自帶的命令就可以了。然而,如果僅僅是這樣,那麼絕大多數人要絕望了,因為恰恰大部分開發者使用的是Windows,而手機很有可能是armeabi系列。

在NDK中自帶了適用於各個操作系統和CPU架構的工具鏈,其中就包含了這兩個命令,只不過名字稍有變化,你可以在NDK目錄的toolchains目錄下找到他們。以我的Mac電腦為例,如果我要找的是適用於armeabi架構的工具,那麼他們分別為arm-linux-androideabi-addr2line和arm-linux-androideabi-objmp;位置在下面目錄中,後續介紹中將省略此位置:

假設你的電腦是Windows系統,CPU架構為mips,那麼你要的工具可能包含在一下目錄中:

接下來就讓我們來看看如何使用這兩個工具,下面具體介紹。

找到日誌中的關鍵函數指針

其實很簡單,就是找到backtrace信息中,屬於我們自己的so文件報錯的行。

首先要找到backtrace信息,有的手機會明確列印一行backtrace(比如我們這次使用的手機),那麼這一行下面的一系列以「#兩位數字 pc」開頭的行就是backtrace信息了。有時可能有的手機並不會列印一行backtrace,那麼只要找到一段以「#兩位數字 pc 」開頭的行,就可以了。

其次要找到屬於自己的so文件報錯的行,這就比較簡單了。找到這些行之後,記下這些行中的函數地址。

使用addr2line查找代碼位置

執行如下的命令,多個指針地址可以在一個命令中帶入,以空格隔開即可

結果如下:

從addr2line的結果就能看到,我們拿到了我們自己的錯誤代碼的調用關系和行數,在hello-jni.cpp的69行和61行(另外兩行因為使用的是標准函數,可以忽略掉),結果和ndk-stack是一致的,說明ndk-stack也是通過addr2line來獲取代碼位置的。

使用objmp獲取函數信息

通過addr2line命令,其實我們已經找到了我們代碼中出錯的位置,已經可以幫助程序員定位問題所在了。但是,這個方法只能獲取代碼行數,並沒有顯示函數信息,顯得不那麼「完美」,對於追求極致的程序員來說,這當然是不夠的。下面我們就演示一下怎麼來定位函數信息。

首先使用如下命令導出函數表:

在生成的asm文件中查找剛剛我們定位的兩個關鍵指針00004fb4和00004f58:

從這兩張圖可以清楚的看到(要注意的是,在不同的NDK版本和不同的操作系統中,asm文件的格式不是完全相同,但都大同小異,請大家仔細比對),這兩個指針分別屬於willCrash()和JNI_OnLoad()函數,再結合剛才addr2line的結果,那麼這兩個地址分別對應的信息就是:

相當完美,和ndk-stack得到的信息完全一致!

Testin崩潰分析如何幫開發者發現NDK錯誤
以上提到的方法,只適合在開發測試期間,如果你的應用或游戲已經上線,而用戶經常反饋說崩潰、閃退,指望用戶幫你收集信息定位問題幾乎是不可能的。這個時候,我們就需要用其他的手段來捕獲崩潰信息。

目前業界已經有一些公司推出了崩潰信息收集的服務,通過嵌入SDK,在程序發生崩潰時收集堆棧信息,發送到雲服務平台,從而幫助開發者定位錯誤信息。在這方面,國內的Testin和國外的crittercism都可以提供類似服務。

Testin從1.4版本開始支持NDK的崩潰分析,其最新版本已升級到1.7。當程序發生NDK錯誤時,其內嵌的SDK會收集程序在用戶手機上發生崩潰時的堆棧信息(主要就是上面我們通過logcat日誌獲取到的函數指針)、設備信息、線程信息等,SDK將這些信息上報至Testin雲服務平台,在平台進行唯一性的處理、並可以自定義時段進行詳盡的統計分析,從多維度展示程序崩潰的信息和嚴重程度;最新版本還支持用戶自定義場景,方便開發者定位問題所在。

從用戶手機上報的堆棧信息,Testin為NDK崩潰提供了符號化的功能,只要將我們編譯過程中產生的包含符號表的so文件上傳,就可以自動將函數指針地址定位到函數名稱和代碼行數。符號化之後,看起來就和我們前面在本地測試的結果是一樣的了,一目瞭然。而且使用這個功能還有一個好處:這些包含符號表的so文件,在每次開發者編譯之後都會改變,很有可能我們發布之後就已經變了,因為開發者會修改程序。在這樣的情況下,即使我們拿到了崩潰時的堆棧信息,那也無法再進行符號化了。我們可以將這些文件上傳到Testin進行符號化的工作,Testin會為我們保存和管理不同版本的so文件,確保信息不會丟失。

㈡ java程序員如何在部門和團隊中給自己定位

一切以你自身的技術和特長來定位.你的問題可能是困惑於將來的發展方向,那麼還是要看你在技術方面見長還是你對需求方面的把握比較好.可以走技術路線也可以走需求路線,也就是往技術經理與項目經理發展

㈢ 作為程序員,大家如何給自己定位的

其實作為程序員,用「程序員」和「雇員」這兩個詞來描述自己是很不充分的。之前聽一個入行一年的程序員說起,很多時候,應該把自己看成是一件產品。如果想發展你的職業生涯,你應該把你的職業生涯當作一個產品來開發。提升產品價值的方式有很多:金錢,身份地位,做有興趣的事情的機會,跟優秀人的共事的機會,等等。都可以增加自己的附加價值。
從這個方向來說:供給和需求
就像一個產品,你也有供和需。你的供給就是你能為雇你的公司提供的東西。它可以是你的能夠開發出一個漂亮的網站的能力。它可以是你的能夠調配一個資料庫的能力。它可以是你的比他人更能出色的完成任務的能力。你的供給是指你將要為雇你的公司提供的實際價值。
你的需求是公司認為的你能為他們做的事。你的需求是你被他人認定的價值。最終你的報酬是跟據你被認定的價值,而不是你能產生的實際價值確定的。這就是為什麼這么多10倍優秀的技術人員拿不到10倍工資的原因
— 他們沒有被公眾認為能夠一個頂十個,所以市場力量也不會按這個標准來哄抬他們的價值。
有太多的人喜歡對自己說「只要我能拿出有質量的作品,我就會受到重視。」這是胡說。這種思維邏輯將會成為開發你的潛能的障礙,將會成為得到你理所應得的回報的障礙,將會成為你獲得更好身份地位的障礙。你不能只注意到你的供給。供給只是事情的50%。你可以是目前在世的最偉大的程序員,但如果只有一個人知道這個事實,這對你毫無意義。你是個產品,如果你想得到適當的回報,你必須對你的市場需求下功夫。
另外一個方向就是:個人品牌化
能影響你的市場需求的東西叫做「個人品牌」。就是市場宣傳。通過它,你可以依靠你的實際價值 — 你的供給 — 來提高你的認定價值 —
你的市場需求。當然這個過程中你的實際價值起很大作用。
個人品牌化本質上是一種公共活動。市場力量的發揮依賴於獲得的公共信息。你需要讓公眾相信你能創造出他們需要的大量的價值。這樣你的機會就創造出來了。其中的很多機會會出乎你的意料,讓你驚喜。
很多事情都可以擴大你的市場需求。你可以寫博客,通過Twitter微博和社會新聞網站做宣傳。參與技術會議演講。通過微博追隨者建立社會口碑。參與開源項目,在博客中講述你在這些項目中都做了什麼。我認識的那個一年從業經驗的程序員,他會運營自己的博客,有自己的網站,閑暇時光,不斷給自己在充電。同時釋放自己的價值給公眾。
開源項目是一個程序員應該參加的最好的一種活動。它可以向公眾展示你解決問題和寫程序的能力。你應該強烈的渴求能工作在一個具有開發和捐獻開源項目傳統的公司里,這樣你就可以獲得推廣自己的好機會了。
推廣自己需要付出努力,但有些事情可以從各種活動中容易的獲得。開發出一個產品卻不做市場宣傳是愚蠢的。同樣的道理,你需要把自己當作一個產品,像產品一樣推廣自己。當你做到了這些,你就會看到供需力量相互作用產生的奇妙結果。

㈣ 如何看出一個程序員的技術能力和水平

其實,評論一個程序員技術的高低,不是看他會多少技術,又懂多少技術。參加過什麼大型的項目,也不是看他有沒有自己的博客,github有多少star。
而是看他解決問題,定位問題的能力。這個很重要,真的很重要。
技術可以很快上手使用,但是解決問題定位問題的能力不是輕易就行的。特別是在高壓下解決問題的能力。
下面是師姐為大家整理的一些建議:

解決問題
1.代碼的命名要規范。
代碼是寫給人看的好嘛!代碼是寫給人看的好嘛!代碼是寫給人看的好嘛!
headImg是什麼鬼?我能以為是banner么,頭部的圖片,請原諒我蹩腳的中式英語!avatar這個呢、portrait這個呢?會不會更好些?英語不好就不能用好有道、google翻譯么?還有用中文拼音命名的,親,我們用的是英文做為腳本好么?你要用這樣的,用易語言可好?!

瘋了!
為什麼要用框架?一個很重要的原因是命名規范,目錄規范,結構規范,分層規范,有利於團隊協作,不要本末倒置!
2.架構和規劃能力很重要,模塊分層,解耦設計什麼的,文件目錄嵌幾層?
這其中又跟命名的能力能搭上點關系。命名都命不好,目錄結構怎麼建?
url不要做的漂亮些嗎?不考慮seo了?
你喜歡addGoods還是喜歡goodsAdd?
請你尊重點我的那些初高中英語語法好么?

3.協助能力、可持續能力。
最好的程序代碼是脫離其產生者的。
為自己程序處處救火的程序汪並不是一條好汪。
我記得一句話就是:別想著你的代碼以後還有機會重構!
每次說,額,這里我後面會改的,會改的,但是可惜,現實情況是根本不會給你這個時間的。
代碼寫出來,一是要爽了自己,二是也要爽了別人。

4.debug的能力、總結能力、學習能力真的很重要,代碼寫出來真的花的時間不長,但擦屁股的時間比寫代碼的時間多多了!
出了問題不記錄,寫個博文都好啊,我可沒那麼強大的記憶力,所以最討厭考記憶力。
5.不要一貫的使用各種演算法,秀演算法的你們夠了,要寫去寫底層,應用的場景比較多。
應用層面的程序,演算法的應用不是特別多,大部分都是業務代碼。以這個作為評價標準的,真心然並卵。

㈤ 程序員的未來發展

社會對程序員的定位是滿足技術需求,程序員自身所受的教育和積累的經驗也使自主前程意識局限於技術路線。實際上,我們所看到的在技術方面有建樹的前輩多是綜合型的人才,單純局限於技術思維的多有行為局限,也難看出自身的幸福感。

畢業幾年了,一直都是從事程序員的工作,從以前只管努力學技術,到現在開始慢慢地思考以後的職業規劃問題了。

十年三階段

工程師的職業發展,前十年是個非常重要的階段。從職業規劃的角度來講,建議把這十年分為三個階段來設定目標:

第一階段(前三年):打基礎。立足培養技術能力和軟技能。第二階段(四年):從個人能力向團隊組織能力轉變。在溝通能力、協作能力和領導力上發力。第三階段(四年):不斷強化領導力(技術領導力和管理領導力)。

在我看來,一個工程師的養成可以分為四個階段:

新人期

硬技能:理論轉化實踐軟素質:養成基本的職業觀

成熟期

硬技能:積累業務知識,積累技術知識軟素質:固化職業觀

發展期

硬技能:明確細化的職業發展方向,深入研究「可能技術, 可能管理, 可能兩者兼具」軟素質:逐步總結並形成自己的方法論

事業期

硬技能:釋放自己,創造價值軟素質:輸出方法論,影響其他人

看到身邊一些「大齡」程序員的出路,主要是這三條:做管理,自己創業和繼續寫程序。

做管理

做管理是絕大多數人的選擇。原因嘛,當下中國職場的大環境如此:招聘單位一般不要年齡大的程序員,再加上你年齡大些後,實戰經驗豐富,不讓你帶人讓誰去帶呢?「大齡」程序員有著多年的開發項目經驗,這些實戰經驗能一些崗位起到很重要的作用。比如:CTO,項目經理、產品經理。

相信在多年的工作中你的技術是無話可說的,但是管理的方式、為人處事的方法、稍穩妥的工作作風以及對於企業長遠的眼光可能是你們真正需要加強的。

創業

自己創業的,這種人大多數是在工作中到了一定的崗位,有了一定的資本,綜合能力提升到一定的水平,但跟搞管理一樣,你還缺許多技術之外的東西

創業者要做的產品不是給客戶的商品,而是企業本身。把企業看做一個系統,運轉良好的系統,就是創業者要開發的產品,這個理念,對於運作企業是非常重要的,也從根本上回答了如何做好企業的問題。

如果單純是因為自己工作不開心,對老闆不滿而憤然離職創業的,這種基本成功概率為零。

如果想繼續抱著鍵盤安安靜靜地寫程序,估計要在某個技術方向深度學習。比如做游戲就一直做游戲,做網路就一直做網路,其它方向的工作基本不在考慮范圍內,這樣才能在一個方向上積累下來;否則各個領域都會一點皮毛,但又沒有精通的,企業幾乎不需要這種人。

程序員找出路還是要盡量提前進行職業規劃和准備,千萬不要說什麼:「走一步,算一步」的話。在這個一睜眼就是競爭的時代,你可以放鬆休息,但別人會繼續前進,不會等你。

㈥ 一個菜鳥程序員該怎樣定位自身的價值方向

我到底能夠解決什麼問題?給別人帶來什麼樣的方便?這是每個程序員首先要考慮的問題。這決定了你要在什麼樣的領域、什麼樣的公司工作,決定了你做什麼產品,也決定了你要選擇什麼技術。

㈦ 程序員不同級別的定位

哦,看來落後了,早都改了,分別叫程序員,軟體設計師,後面一個忘記了,好象是分析員什麼的了..。..
分別用來衡量你對軟體設計的一種能力了....
如果可以對立開發軟體的話,就基本上達到了程序員的級別,也就是以前的初級程序員了。..
而軟體設計師呢,它主要是對軟體開發的一種總體規劃了...建議你多看看軟體工程.如果你仔細看完軟體工程,應該可以達到這個級別了..
而到最高境界的話,就必須能夠對軟體的設計提出詳細的模塊化的分割.
然後分割後交給程序員去完成的了....
所以我說你應該是基本上達到了程序員的級別了。.

㈧ 程序員需要具備哪些知識

1、程序員需要學會主動學習,要懂得懂得不斷精進自己的專業技能。
2、程序員需要具有個人品牌意識,要學會自我營銷,在業界打造自己的個人品牌。
3、程序員重視單元測試,專業的程序員需要知道單元測試的重要性,會把測試代碼和產品代碼看的一樣重要。
4、程序員要善於管理時間。尊重對方的時間。只召集那些必要的同事參加會議,並且會在會議前整理好會議的主題和議程。
5、程序員要善於管理精力。專業的程序員能夠讓自己精力充沛地投入到工作中。
6、程序員要善於管理壓力。專業的程序員會盡量避免壓力,他們謹慎承諾,不答應做不到的事情;懂得保持代碼的整潔,方便問題定位和重構代碼。
7、要懂得去掌握一些編程之外的技術。專業的程序員除了們具備計算機原理、TCP/IP協議這些計算機學科的基礎知識,他們也會對常用的Shell命令牢記於心,他們還善於使用各種工具的快捷鍵來提升他們的工作效率。

㈨ 我是web前端程序員,經常遇到火狐下的定位問題,特別是在table表格的時候,具體情況如圖。

您好!感謝您對火狐產品的支持!如果您的電腦上面有多款瀏覽器,當您打開火狐瀏覽器,界面上就會有個提示,是否設置為默認瀏覽器,點擊「是」就可以了。火狐瀏覽器使用的是Gecko內核,是一款開源、安全的瀏覽器,擁有非常強大的擴展功能,可以根據自己的需求定製瀏覽體驗。您可以在火狐社區了解更多內容。希望我的回答對您有所幫助和得到您的採納。

㈩ 程序員日常生活面臨的問題和挑戰有哪些

一、熬夜
很多程序員將熬夜變成了生活習慣,還口口聲聲解釋「程序員只有在晚上效率才高」,這是非常扯淡的理論。有人將程序員做下圖的類比,雖然比較貼切,但這種方式對你的健康傷害是最大的。建議你嘗試一下晚上10點睡覺,早上6點起來工作的作息方式,也許會事半功倍。
二、久坐
有些程序員在電腦面前一坐就是一天,中間除了吃飯上廁所外,基本不起來動動。這是非常不好的習慣,時間久了,很容易得肩周炎、頸椎病,到時候後悔就晚了。建議每坐一個小時就起來動10分鍾,主要是轉轉手臂和脖子。
三、外賣和泡麵

很多程序員在飲食上也非常不注重健康,上班的時候為了貪圖方便經常叫一些外賣,更厲害的是直接搞一桶方便麵來做午餐。這里建議大家中午出去吃,葷素搭配,再可以弄點水果。
四、缺乏鍛煉

建議在工作日下班後做一些簡單的球類運動,乒乓球、羽毛球。
五、用眼過度
IT公司的員工的體檢報告中大部分程序員都患有「慢性結膜炎」,當然對於這個病並不是長時間對著電腦引起的,但是用眼過度也會加劇「慢性結膜炎」的惡化。
建議大家平時准備防止眼乾的眼葯水,如果確定是結膜炎的話,還要及時去醫院就診。另外電腦的背景可以設成綠色,這樣對眼睛也能起到一定的保護作用。

閱讀全文

與程序員問題定位相關的資料

熱點內容
netbeansclinux 瀏覽:180
不可能的世界小說免費閱讀 瀏覽:271
法國啄木鳥絲襪電影 瀏覽:307
動作片愛情在線免費觀看 瀏覽:1002
騰飛投資理財分紅源碼 瀏覽:854
windows打開埠命令 瀏覽:93
php獲取數組第一個元素key 瀏覽:488
重生二戰德國元首希特勒 瀏覽:135
被迫成為言情文的炮灰男小三 瀏覽:646
風月片在線觀看視頻 瀏覽:427
如何更新搶修app 瀏覽:711
aqdya愛情網 瀏覽:743
韓國倫理電影正宇 瀏覽:887
男主角在劇里叫諾亞的電影 瀏覽:794
集結號的男主 瀏覽:415
魔獸世界懷舊服會長移交命令 瀏覽:100
中文字幕在線觀看的網站 瀏覽:473
主角上自己女兒的小說 瀏覽:112
javaextjs文件上傳 瀏覽:28
有哪些佛教電影 瀏覽:149