スタックトレースとは何ですか?それを使用してアプリケーションエラーをデバッグするにはどうすればよいですか?

674
Rob Hruska 2010-10-22 04:52.

アプリケーションを実行すると、次のようなエラーが発生することがあります。

Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

人々はこれを「スタックトレース」と呼んでいます。スタックトレースとは何ですか?私のプログラムで起こっているエラーについて何を教えてくれますか?


この質問について-初心者プログラマーが「エラーを取得」しているところに質問が来ることがよくあります。スタックトレースとは何か、またはスタックトレースの使用方法を理解せずに、スタックトレースとランダムなコードブロックを貼り付けるだけです。この質問は、スタックトレースの値を理解するのに助けが必要な初心者プログラマーのためのリファレンスとして意図されています。

7 answers

623
Rob Hruska 2010-10-22 04:52.

簡単に言うと、スタックトレースは、例外がスローされたときにアプリケーションが途中で行ったメソッド呼び出しのリストです。

簡単な例

質問の例を使用すると、アプリケーションのどこで例外がスローされたかを正確に判断できます。スタックトレースを見てみましょう。

Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

これは非常に単純なスタックトレースです。「at ...」のリストの最初から始めると、エラーが発生した場所がわかります。私たちが探しているのは、アプリケーションの一部である最上位のメソッド呼び出しです。この場合、次のようになります。

at com.example.myproject.Book.getTitle(Book.java:16)

これをデバッグするために、次の行を開いてBook.java確認できます16

15   public String getTitle() {
16      System.out.println(title.toString());
17      return title;
18   }

これは、何か(おそらくtitle)がnull上記のコードに含まれていることを示します。

一連の例外の例

アプリケーションが例外をキャッチし、別の例外の原因として再スローする場合があります。これは通常、次のようになります。

34   public void getBookIds(int id) {
35      try {
36         book.getId(id);    // this method it throws a NullPointerException on line 22
37      } catch (NullPointerException e) {
38         throw new IllegalStateException("A book has a null property", e)
39      }
40   }

これにより、次のようなスタックトレースが得られる可能性があります。

Exception in thread "main" java.lang.IllegalStateException: A book has a null property
        at com.example.myproject.Author.getBookIds(Author.java:38)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
        at com.example.myproject.Book.getId(Book.java:22)
        at com.example.myproject.Author.getBookIds(Author.java:36)
        ... 1 more

これの違いは「原因」です。例外には、複数の「原因」セクションがある場合があります。これらの場合、通常、スタックトレースで最も低い「原因」セクションの1つである「根本原因」を見つける必要があります。私たちの場合、それは次のとおりです。

Caused by: java.lang.NullPointerException <-- root cause
        at com.example.myproject.Book.getId(Book.java:22) <-- important line

繰り返しますが、これは例外で、私たちはラインを見てみたいと思います22Book.java原因となる可能性があるか見てNullPointerExceptionここに。

ライブラリコードを使用したさらに困難な例

通常、スタックトレースは、上記の2つの例よりもはるかに複雑です。次に例を示します(長い例ですが、連鎖例外のいくつかのレベルを示しています)。

javax.servlet.ServletException: Something bad happened
    at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:60)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.example.myproject.ExceptionHandlerFilter.doFilter(ExceptionHandlerFilter.java:28) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.example.myproject.OutputBufferFilter.doFilter(OutputBufferFilter.java:33)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: com.example.myproject.MyProjectServletException
    at com.example.myproject.MyServlet.doPost(MyServlet.java:169)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.example.myproject.OpenSessionInViewFilter.doFilter(OpenSessionInViewFilter.java:30) ... 27 more Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [com.example.myproject.MyEntity] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:64) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2329) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2822) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:705) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:693) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:689) at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344)
    at $Proxy19.save(Unknown Source)
    at com.example.myproject.MyEntityService.save(MyEntityService.java:59) <-- relevant call (see notes below)
    at com.example.myproject.MyServlet.doPost(MyServlet.java:164)
    ... 32 more
Caused by: java.sql.SQLException: Violation of unique constraint MY_ENTITY_UK_1: duplicate value(s) for column(s) MY_COLUMN in statement [...]
    at org.hsqldb.jdbc.Util.throwError(Unknown Source)
    at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
    at org.hibernate.id.insert.AbstractSelectingDelegate.performInsert(AbstractSelectingDelegate.java:57)
    ... 54 more

この例では、さらに多くのことがあります。私たちが最も懸念しているのは、コードからのメソッドを探すことです。これは、com.example.myprojectパッケージ内のすべてのものです。2番目の例(上記)から、最初に根本原因を調べたいと思います。それは次のとおりです。

Caused by: java.sql.SQLException

ただし、その下のすべてのメソッド呼び出しはライブラリコードです。その上にある「Causedby」に移動し、コードから発生した最初のメソッド呼び出しを探します。これは次のとおりです。

at com.example.myproject.MyEntityService.save(MyEntityService.java:59)

前の例のように、このエラーが発生した場所であるため、MyEntityService.javaオンライン59で確認する必要があります(SQLExceptionがエラーを示しているため、これは問題が発生したことは少し明らかですが、デバッグ手順が目的です)。

82
Dakkaron 2015-10-15 00:40.

私はこの回答を投稿しているので、一番上の回答(アクティビティでソートした場合)は単に間違っているものではありません。

スタックトレースとは何ですか?

スタックトレースは非常に便利なデバッグツールです。キャッチされなかった例外がスローされたとき(またはスタックトレースが手動で生成されたとき)の呼び出しスタック(つまり、その時点までに呼び出された関数のスタック)が表示されます。これは、エラーが発生した場所だけでなく、プログラムがコードのその場所でどのように終了したかを示すため、非常に便利です。これは次の質問につながります:

例外とは何ですか?

例外は、ランタイム環境がエラーが発生したことを通知するために使用するものです。一般的な例は、NullPointerException、IndexOutOfBoundsException、またはArithmeticExceptionです。これらのそれぞれは、あなたが不可能なことをしようとしたときに引き起こされます。たとえば、Nullオブジェクトを逆参照しようとすると、NullPointerExceptionがスローされます。

Object a = null;
a.toString();                 //this line throws a NullPointerException

Object[] b = new Object[5];
System.out.println(b[10]);    //this line throws an IndexOutOfBoundsException,
                              //because b is only 5 elements long
int ia = 5;
int ib = 0;
ia = ia/ib;                   //this line throws an  ArithmeticException with the 
                              //message "/ by 0", because you are trying to
                              //divide by 0, which is not possible.

Stacktraces / Exceptionsをどのように処理する必要がありますか?

最初に、例外の原因を突き止めます。例外の名前をグーグルで検索して、その例外の原因を調べてください。ほとんどの場合、コードが正しくないことが原因です。上記の例では、すべての例外は誤ったコードが原因で発生します。したがって、NullPointerExceptionの例でaは、その時点でnullにならないようにすることができます。たとえば、a次のようなチェックを初期化または含めることができます。

if (a!=null) {
    a.toString();
}

このように、問題のある行は、の場合は実行されませんa==null。他の例についても同じことが言えます。

例外が発生しないことを確認できない場合があります。たとえば、プログラムでネットワーク接続を使用している場合、コンピューターがインターネット接続を失うのを防ぐことはできません(たとえば、ユーザーがコンピューターのネットワーク接続を切断するのを止めることはできません)。この場合、ネットワークライブラリはおそらく例外をスローします。ここで、例外をキャッチして処理する必要があります。つまり、ネットワーク接続の例では、接続を再開するか、ユーザーなどに通知する必要があります。また、catchを使用する場合は常に、キャッチしたい例外のみをキャッチします。すべての例外をキャッチするような広範なcatchステートメントは使用しないcatch (Exception e)ください。これは非常に重要です。そうしないと、誤って間違った例外をキャッチし、間違った方法で反応する可能性があるためです。

try {
    Socket x = new Socket("1.1.1.1", 6789);
    x.getInputStream().read()
} catch (IOException e) {
    System.err.println("Connection could not be established, please try again later!")
}

なぜ使用しないのcatch (Exception e)ですか?

小さな例を使用して、すべての例外をキャッチするだけではいけない理由を示しましょう。

int mult(Integer a,Integer b) {
    try {
        int result = a/b
        return result;
    } catch (Exception e) {
        System.err.println("Error: Division by zero!");
        return 0;
    }
}

何このコードが何をしようとしていることはキャッチすることですArithmeticException0で除算可能に起因するしかし、それはまた、可能キャッチしNullPointerExceptionた場合にスローされているaか、bですがnull。つまり、が発生する可能性がありますが、NullPointerExceptionそれをArithmeticExceptionとして扱い、おそらく間違ったことをします。最良の場合でも、NullPointerExceptionがあったことを見逃します。そのようなものはデバッグをはるかに難しくするので、そうしないでください。

TLDR

  1. 例外の原因を特定して修正し、例外がまったくスローされないようにします。
  2. 1.が不可能な場合は、特定の例外をキャッチして処理します。

    • try / catchを追加して、例外を無視しないでください。そうしないでください!
    • 使用しないでくださいcatch (Exception e)。常に特定の例外をキャッチしてください。それはあなたに多くの頭痛を救うでしょう。
21
Woot4Moo 2010-10-22 05:05.

ロブが言ったことに追加する。アプリケーションにブレークポイントを設定すると、スタックを段階的に処理できます。これにより、開発者はデバッガーを使用して、メソッドが予期しないことを実行している正確なポイントを確認できます。

RobはNullPointerException(NPE)を使用して一般的なことを説明しているため、次の方法でこの問題を取り除くことができます。

次のようなパラメータを受け取るメソッドがある場合: void (String firstName)

私たちのコードでfirstNameは、値を含む評価を行いたいので、次のようにします。if(firstName == null || firstName.equals("")) return;

上記はfirstName、安全でないパラメータとして使用することを防ぎます。したがって、処理の前にnullチェックを実行することで、コードが正しく実行されることを確認できます。メソッドでオブジェクトを利用する例を拡張するために、ここを見ることができます:

if(dog == null || dog.firstName == null) return;

上記はnullをチェックする適切な順序です。ベースオブジェクト(この場合はdog)から始めて、処理の前にすべてが有効であることを確認するために可能性のツリーを歩き始めます。順序が逆になると、NPEがスローされる可能性があり、プログラムがクラッシュします。

15
przemek hertel 2014-09-17 07:34.

Throwableファミリによって提供されるもう1つのスタックトレース機能があります。スタックトレース情報を操作する可能性です。

標準的な動作:

package test.stack.trace;

public class SomeClass {

    public void methodA() {
        methodB();
    }

    public void methodB() {
        methodC();
    }

    public void methodC() {
        throw new RuntimeException();
    }

    public static void main(String[] args) {
        new SomeClass().methodA();
    }
}

スタックトレース:

Exception in thread "main" java.lang.RuntimeException
    at test.stack.trace.SomeClass.methodC(SomeClass.java:18)
    at test.stack.trace.SomeClass.methodB(SomeClass.java:13)
    at test.stack.trace.SomeClass.methodA(SomeClass.java:9)
    at test.stack.trace.SomeClass.main(SomeClass.java:27)

操作されたスタックトレース:

package test.stack.trace;

public class SomeClass {

    ...

    public void methodC() {
        RuntimeException e = new RuntimeException();
        e.setStackTrace(new StackTraceElement[]{
                new StackTraceElement("OtherClass", "methodX", "String.java", 99),
                new StackTraceElement("OtherClass", "methodY", "String.java", 55)
        });
        throw e;
    }

    public static void main(String[] args) {
        new SomeClass().methodA();
    }
}

スタックトレース:

Exception in thread "main" java.lang.RuntimeException
    at OtherClass.methodX(String.java:99)
    at OtherClass.methodY(String.java:55)
15
Kevin Li 2016-07-26 16:24.

名前を理解するには:スタックトレースは、最も表面的な例外(例:サービスレイヤー例外)から最も深い例外(例:データベース例外)までの例外のリスト(または「原因」のリストと言うことができます)です。これを「スタック」と呼ぶ理由と同じように、スタックは後入れ先出し(FILO)であるため、最も深い例外が最初に発生し、その後、一連の例外が生成され、一連の結果が生成されました。 1つは時間内に発生しましたが、そもそもそれがわかります。

重要1:ここで理解する必要のあるトリッキーで重要なことは次のとおりです。最も深い原因は「根本原因」ではない可能性があります。「悪いコード」を書くと、その下にそのレイヤーよりも深い例外が発生する可能性があるためです。たとえば、SQLクエリが正しくないと、スタックの真ん中にある可能性があるsyndaxエラーではなく、下部でSQLServerException接続がリセットされる可能性があります。

->真ん中の根本原因を見つけるのはあなたの仕事です。

キー2:もう1つのトリッキーですが重要なことは、各「Cause by」ブロック内にあります。最初の行は最も深いレイヤーであり、このブロックの最初の場所で発生します。例えば、

Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
           at com.example.myproject.Author.getBookTitles(Author.java:25)
               at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

Book.java:16はBootstrap.java:14によって呼び出されたAuther.java:25によって呼び出され、Book.java:16が根本的な原因でした。ここに図を添付して、トレーススタックを時系列で並べ替えます。

8
Eugene S 2016-04-19 17:43.

他の例に追加するために、記号とともに表示れる内部(ネストされた)クラスがあります$。例えば:

public class Test {

    private static void privateMethod() {
        throw new RuntimeException();
    }

    public static void main(String[] args) throws Exception {
        Runnable runnable = new Runnable() {
            @Override public void run() {
                privateMethod();
            }
        };
        runnable.run();
    }
}

結果は次のスタックトレースになります。

Exception in thread "main" java.lang.RuntimeException
        at Test.privateMethod(Test.java:4)
        at Test.access$000(Test.java:1)
        at Test$1.run(Test.java:10)
        at Test.main(Test.java:13)
6
rghome 2015-03-12 23:34.

他の投稿では、スタックトレースとは何かについて説明していますが、それでも操作が難しい場合があります。

スタックトレースを取得し、例外の原因を追跡したい場合は、それを理解するための良い出発点は、EclipseのJavaスタックトレースコンソールを使用することです。別のIDEを使用する場合、同様の機能があるかもしれませんが、この答えはEclipseに関するものです。

まず、EclipseプロジェクトですべてのJavaソースにアクセスできることを確認します。

次に、Javaパースペクティブで、[コンソール]タブ(通常は下部)をクリックします。コンソールビューが表示されていない場合は、メニューオプション[ウィンドウ] -> [ビューの表示]に移動し、[コンソール]を選択します。

次に、コンソールウィンドウで、次のボタン(右側)をクリックします。

次に、ドロップダウンリストから[ Java Stack TraceConsole]を選択します。

スタックトレースをコンソールに貼り付けます。次に、ソースコードおよびその他の利用可能なソースコードへのリンクのリストが提供されます。

これはあなたが見るかもしれないものです(Eclipseドキュメントからの画像):

作られた最新のメソッド呼び出しは次のようになりますトップ(メッセージテキストを除く)トップラインであるスタックの。スタックを下に行くと、過去にさかのぼります。2行目は、1行目などを呼び出すメソッドです。

オープンソースソフトウェアを使用している場合、調査したい場合は、ソースをダウンロードしてプロジェクトに添付する必要があるかもしれません。ソースjarをダウンロードし、プロジェクトで[参照ライブラリ]フォルダーを開いてオープンソースモジュール(クラスファイルを含む)のjarを見つけ、右クリックして[プロパティ]を選択し、ソースjarを添付します

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

Netflixのジョエルマクヘイルとのジョエルマクヘイルショーは、ジョエルマクヘイルにぴったりの車を復活させます

Netflixのジョエルマクヘイルとのジョエルマクヘイルショーは、ジョエルマクヘイルにぴったりの車を復活させます

ジョエル・マクヘイル、マイク・コルター(スクリーンショット:Netflix)「私の神よ、これは1つのことを変えます。」これは、ジョエル・マクヘイルとのジョエル・マクヘイルショーの最後のジョークです。リアリティ番組の嘲笑と寛大なスナキネスの時間は、なじみのある顔を見つけます。

チームロケットは20年ぶりにポケモンシリーズでアッシュを破った

チームロケットは20年ぶりにポケモンシリーズでアッシュを破った

画像経由:@pancakeparadox(Twitter)。1997年にポケモンシリーズが初公開されて以来、チームロケット(またはラテンアメリカではチームロケット)として知られる悪役のグループは、何度もアッシュに直面してきました。

今週の科学技術でトランプがめちゃくちゃになったことすべて

今週の科学技術でトランプがめちゃくちゃになったことすべて

画像:ゲッティ私たち全員が千年もの間生きていて、私たちの体が燃える風によってほこりと長引く悲鳴だけに押し流されたと考えるのは驚くべきことです。私たちがそうしていないことを除いて、それはトランプ政権の最初の週の終わりであり、驚くほど多くの恐ろしいことがすでに起こっています。

あなたの「マイクロピッグ」が代わりに通常のピッグになってしまったとしても驚かないでください

あなたの「マイクロピッグ」が代わりに通常のピッグになってしまったとしても驚かないでください

そして今、あることを手に入れていると思っていたが、まったく別のことをしてしまった男の話。CBSニュースは、彼女が「ミニブタ」であるという誤ったふりをしてエスターを養子にしたカナダ人のスティーブジェンキンスの心温まる物語をもたらします。これは、特にせいぜいゴールデンレトリバーまたはセントバーナードをストラップします。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language