25/10/07 18:15:23.51 PufELU/u.net
fpcで作成したコンソールアプリが実行時にEAccessViolationとなるのでfpcでソースのエラー位置を調べたら
ある関数の最後のendが示されて役に立ちませんでした
Lazarusに持って行ったら例外で停止さえしませんでした
Delphai6に持って行ってOSによる例外をデバッガが受け取るという設定にしたらやっと発生位置が特定できました
FPC/Lazarusではどうにもならないのでしょうか
Lazurusはちょっと古くて2.2.4です
999:デフォルトの名無しさん
25/10/07 22:35:09.49 GcmYQjI+.net
>>990
プロジェクトオプションの最適化が有効になっているからでは?
「0.最適化なし」にして試してみては?
1000:デフォルトの名無しさん
25/10/08 09:53:53.24 i2Vw4tqm.net
最適化がオンでもオフでも
Execution stopped with exit-code 1 ($0001)
というポップアップが出て終了してしまいます
エラー位置にカーソルは行ってくれません
デバッガはdefault debuggerでもGdbでも同じです
1001:デフォルトの名無しさん
25/10/08 10:11:36.23 i2Vw4tqm.net
982で「例外で停止さえしませんでした」というのは嘘でしたstoppedだから停止はしていますね
でもどこで停止したのかがわかりません
fpcでは
fpc -glh -O- とかやってどの関数でエラーが発生したのかまではわかるのですが
1002:デフォルトの名無しさん
25/10/08 14:47:25.50 xHDBIHkx.net
fpcそのものからは離れますが
exet code が1でエラーなので例外停止したと読めます
ただコンソールアプリがさまざまな返り値を返すこと自体はエラーでも何でもなく普通のことだと私は理解しています
アプリの終了時に0を返せばいいのでは?
Cだと
int main()
{
printf("hello world");
return 0;
}
エラー位置が特定できないのはそもそもプログラムが終わっているからとも解釈できます。rezarusにexiecode=1のエラーを無視するみたいなのはないのでしょうか?
的外れでしたらすみません
1003:デフォルトの名無しさん
25/10/08 21:55:59.60 i2Vw4tqm.net
>>994
985 に訂正して書きましたようにLazarusでもエラー停止はしています
デバッガにはエラー位置を特定してもらいたいという話です
Lazarus/FPCではEAccessViolationのエラーについてそれができないようでした
一方Delphi 6では同じソースでEAccessViolationについても停止してからIDE上でカーソルがエラー位置に飛びます
1004:デフォルトの名無しさん
25/10/09 07:09:23.25 l11UH+Dz.net
どうもお役に立てなかったようです
1005:デフォルトの名無しさん
25/10/12 17:55:59.44 E5GJpTM9.net
987です
前回のプログラムは開発途中でもう残っていないのですが、EAccessViolationが発生する単純なプログラムで
今日改めてテストして見ました所Lazarus/FPCとも正しくエラー行を表示してくれました
お騒がせしてすみませんでした
前回は一体何だったのだろうか・・・
{$APPTYPE CONSOLE}
program test;
uses SysUtils;
var
p: PInteger;
begin
Writeln('Start');
p := nil;
p^ := 123;
Readln
end.
1006:デフォルトの名無しさん
25/10/13 09:39:19.36 Jdg3EAgT.net
コンソールアプリの返り値が1なのでエラーだったと思いますが
書き込まれたソースですと返り値が指定されていません
よって返り値は不定なのでその度に結果が異なると解釈できないことはありません。
なので返り値を明示的に指定してその結果を比較されていかがでしょうか?
以下はgrokに聞きました
Q)pascal(free pascal)を使用して、windows(dos)上で動作するコンソールアプリを作成します
そのコンソールアプリの返り値を指定するにはどうしたらいいですか
A) by grok
Free Pascalでは、プログラムの終了コードをHalt手続きやExitCode変数を使用して設定できます。以下に具体的な手順とサンプルコードを示します。
<<sample1>>
program ExitCodeDemo;
begin
WriteLn('プログラムが正常に終了しました');
Halt(0); // 終了コード 0 を返す
end.
<<sample2>>
program ExitCodeDemo;
begin
WriteLn('プログラムが実行中...');
ExitCode := 42; // 終了コード 42 を返す
end.
1007:デフォルトの名無しさん
25/10/14 19:14:39.90 QTjOk1jf.net
>>998
989ですが、今となっては当初デバッガが動作しなかった理由はわかりません
その後簡単なテストプログラムで問題なくエラー行は検知されました
ちなみにFree Pascalのプログラムではエラーの時に返り値を設定する以外に特に返り値の指定は不要で、
正常終了すればゼロになります
1008:デフォルトの名無しさん
25/11/12 01:21:59.39 oQstHhSD.net
Lazarus 4.4が出ました
URLリンク(forum.lazarus.freepascal.org)
1009:デフォルトの名無しさん
25/11/12 09:15:18.55 JDphJLx0.net
バージョンアップする必要性を感じなくなって2.2.4のまま使っている
fpcはunicode不完全対応の3.2.2でずっと変わらないし過去作成したプログラムを修正する必要が発生するかもしれないのもいやだしね
1010:デフォルトの名無しさん
25/11/26 12:38:54.27 NbdKRcvb.net
次スレ立ててみました
delphi互換 freePasacal Lazarus その3(GPL)
スレリンク(tech板)
1011:デフォルトの名無しさん
25/11/28 06:28:06.44 YehK5uv+.net
>>999
君はなんか餅違いをしてそうだね
1012:デフォルトの名無しさん
25/11/28 06:28:52.79 YehK5uv+.net
>>999
君はなんか思い違いをしてそうだね
1013:デフォルトの名無しさん
25/11/28 06:30:05.51 YehK5uv+.net
>>1001
そういうの大事だよね
1014:デフォルトの名無しさん
25/11/28 06:30:50.84 YehK5uv+.net
>>1002
O2
1015:デフォルトの名無しさん
25/11/28 06:32:05.17 YehK5uv+.net
JCが自宅に放火して逃亡ω
1016:デフォルトの名無しさん
25/11/28 06:32:39.03 YehK5uv+.net
delphi互換 freePasacal Lazarus その3(GPL)
スレリンク(tech板)
1017:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 5817日 3時間 46分 22秒
1018:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています