プログラムオーバーフローまたはスタックオーバーフローによるデッドラインまたは異常な問題のトラブルシューティングを解決する方法
1104 ワード
概要:
プログラム開発では、不思議なハングアップやプログラムエラーの実行に遭遇する可能性があります.デッドラインならcoredumpを見ることができますが、coredumpはCライブラリで死んでいる可能性があります.私たちは何も見えません.この場合、印刷を追加して、問題の所在を特定するために関連する変数を印刷することができます.ここには自分の簡単な問題解決方法を記録します.
解決方法:
1,プログラムは1つの操作によってトリガされた後、プログラムが送信したデータが送信できないか、あるいはフリーズすることがあり、coredumpを見ても問題が見えない場合があります.このとき、実行をトリガするコードを見つけて、問題が発生する可能性がある場所を詳しく見てみましょう.
2、プログラムコード全体に印刷を加えて、handleハンドル、ポインタアドレスなどの関連変数の値を印刷し、値が改ざんされるかどうか、ポインタアドレスが変更されるかどうかを確認します.配列が境界を越えたり、スタックがオーバーフローしたりすると、変数やポインタアドレスが変更される可能性があります.この場合、ハンドルが変更されてデータが送信されない可能性があります.ポインタアドレスの変更はfreeで操作され、フリーズする可能性があります.
3,印刷情報により具体的なコード分析を行い,問題点を特定する.(私の今回の問題は配列が境界を越えてsessionHandle値が改ざんされ、データが送信されず、ポインタアドレスが変更され、freeがハングアップすることもあります)
メモ:
自分で印刷する小さな方法で、直接迅速にコピーすることができて、迅速で便利で、小さい例:
プログラム開発では、不思議なハングアップやプログラムエラーの実行に遭遇する可能性があります.デッドラインならcoredumpを見ることができますが、coredumpはCライブラリで死んでいる可能性があります.私たちは何も見えません.この場合、印刷を追加して、問題の所在を特定するために関連する変数を印刷することができます.ここには自分の簡単な問題解決方法を記録します.
解決方法:
1,プログラムは1つの操作によってトリガされた後、プログラムが送信したデータが送信できないか、あるいはフリーズすることがあり、coredumpを見ても問題が見えない場合があります.このとき、実行をトリガするコードを見つけて、問題が発生する可能性がある場所を詳しく見てみましょう.
2、プログラムコード全体に印刷を加えて、handleハンドル、ポインタアドレスなどの関連変数の値を印刷し、値が改ざんされるかどうか、ポインタアドレスが変更されるかどうかを確認します.配列が境界を越えたり、スタックがオーバーフローしたりすると、変数やポインタアドレスが変更される可能性があります.この場合、ハンドルが変更されてデータが送信されない可能性があります.ポインタアドレスの変更はfreeで操作され、フリーズする可能性があります.
3,印刷情報により具体的なコード分析を行い,問題点を特定する.(私の今回の問題は配列が境界を越えてsessionHandle値が改ざんされ、データが送信されず、ポインタアドレスが変更され、freeがハングアップすることもあります)
メモ:
自分で印刷する小さな方法で、直接迅速にコピーすることができて、迅速で便利で、小さい例:
printf("[%d][%s]skyj=============response= %p
", __LINE__, __FUNC__, &response);
printf("[%d][%s]skyj=============sessionHandle %p %d
", __LINE__, __FUNC__, &sessionHandle, sessionHandle);
printf("[%d][%s]skyj=============pFileInfo= %p
", __LINE__, __FUNC__, pFileInfo);