C#で、以下のような処理が入ってる書いたプログラムソースがあります
(省略)
try
{
(省略)
}
catch(Exception ex)
{
MessageBox.Show("失敗");
using (StreamWriter js = new StreamWriter($"error.log", true))
{
js.Write(DateTime.Now.ToString("g") + ex.ToString() + "\n");
}
return;
}
(省略)
VisualStudioでリリースビルドしたexeファイルを他の人のPC上で実行させて、この処理が動いた際、error.logに以下が書き込まれてました
2024/06/01 11:50 省略
~ Button_Click(Object sender, RoutedEventArgs e) in
C:\work\001\002\code\Tool\Tool\OutPut.xaml.cs:line 1512
error.log
に出てきたファイルパスは、自分がこのプログラムを作成した時のファイルパスだと思います
どのファイルがどの行でエラー出したかが分かりやすくて良いのですが、作成時のファイルパスが入ってるのがなんか嫌です
これって ex.ToString()
の処理で書き込まれた部分ですが、ファイルパスは出さないようにできますか?
No.5ベストアンサー
- 回答日時:
できません。
コンパイル時のデバッグシンボルなので、一般的にはリリースコンパイル時にデバッグシンボルは含めないことがほとんどです。
よほど本番環境でバカスカエラーを吐くような質の悪いものを提供しているような環境なら別でしょうけど。
その場合、色々な作業をする上でエンドユーザー名でフォルダ分けとかしてると思いますが、あまりパス情報に個人のローカルアカウント名やエンドユーザー名とか入れたくありませんよね。
想定外のエラーを捕捉してエラーログを出力するなら、デバッグシンボルによるスタックトレースに頼るのではなく、それ相応の操作されたリクエストログなどを出力するのがよいかと思います。
どうしてもデバッグシンボルからのスタックトレースで出力したいなら、
自前でちょっと加工するしかありませんね。
テキトーに作りましたが、下記の例だと、例外クラスの拡張メソッドを用意してそれを利用することで、簡素的にパス情報を除去します。
コンパイル時のソシューションパス情報は分からないため全部除去します。
そのため、どのフォルダ構成上にあるファイルなのかは分かりません。
js.Write(DateTime.Now.ToString("g") + ex.ToStringWithoutCompiledPath() + "\n");
public static class ExceptionExtension
{
private static readonly Regex FilePathRegex = new Regex(@"(?<=in )(.+)(?=\\.+\.(cs|vb):)", RegexOptions.Compiled);
public static string ToStringWithoutCompiledPath(this Exception exception)
{
var sb = new StringBuilder($"{exception.GetType().FullName}: {exception.Message}{Environment.NewLine}");
if (exception.StackTrace != null)
{
sb.Append(FilePathRegex.Replace(exception.StackTrace, ""));
}
return sb.ToString();
}
}
No.6
- 回答日時:
No2の方のアドバイスに従い、Exception.ToString() で得られた文字列から
C:\work\001\002\code\Tool\Tool\ を削除するようにしました。
以下のようになります。
catch(Exception ex)
{
MessageBox.Show("失敗");
using (StreamWriter js = new StreamWriter($"error.log", true))
{
//変更開始
string msg = ex.ToString();
msg = msg.Replace(@"C:\work\001\002\code\Tool\Tool\", @"");
js.Write(DateTime.Now.ToString("g") + msg + "\n");
//変更終了
}
return;
}
No.4
- 回答日時:
デバッグ情報(*.pdb)を消せば簡単に消えますが、客先で起きた
不具合の解析が非常に困難になります。
ファイルの構成がバレるより1億倍困ります。
私なら決して消しません。消すやつがいたら殴って叩き出します(^^;
現場の人間が途方にくれないようにしましょう。
#昔ファイル名や識別子にプロレスラーの名前を付けるやつがいましたが
#その類でしょうか? あれは恥ずかしいです(^^;
No.3
- 回答日時:
その情報はデバッグ情報が有効な場合に出ます
他の人に渡す場合はデバッグ情報を除いてコード生成しましょう
https://learn.microsoft.com/ja-jp/dotnet/api/sys …
> 呼び出した Environment.StackTrace 結果が取得
https://learn.microsoft.com/ja-jp/dotnet/api/sys …
> at FullClassName.MethodName(MethodParams) in FileName:LineNumber
> デバッグシンボルが使用できない場合は in で始まる部分文字列全体が省略
https://learn.microsoft.com/ja-jp/dotnet/csharp/ …
> -debug: デバッグ情報を生成します (または生成しません)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- その他(プログラミング・Web制作) VBAでパワーシェルを実行したいのですが、なかなかうまく出来ず、有識者の知識をお借りさせてください。 2 2024/05/11 00:25
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Visual Basic(VBA) wordのマクロで思うように行きません(ファイル削除ができない) 3 2023/09/12 08:34
- Visual Basic(VBA) VBA一覧取得 再投稿 1 2024/05/25 12:28
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
お風呂の温度、何℃にしてますか?
みなさん、家のお風呂って何℃で入ってますか? ぬるめのお湯にゆったり…という方もいれば、熱いのが好き!という方もいるかと思います。 我が家は平均的(?)な42℃設定なのですが、みなさんのご家庭では何℃に設定していますか?
-
10進数からN進数に変換するプログラミング(C言語)
C言語・C++・C#
-
CPUが16bitでも32bitOSでコンパイルしたコード(例えばintが4バイトと定義されている)
C言語・C++・C#
-
c言語
C言語・C++・C#
-
-
4
プログラミングの課題がわからないので教えていただきたいです。特にサークル関数を定義した後に呼び出す方
C言語・C++・C#
-
5
プログラム言語について c言語もコードによって機械語に通訳されると知りました。直接機械が通訳しなくて
C言語・C++・C#
-
6
0 == False はいいけど
C言語・C++・C#
-
7
プログラムの実行時に'<'でリダイレクトする場合でも、キーボードからの入力を受け取られる件について
C言語・C++・C#
-
8
mallocについて
C言語・C++・C#
-
9
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
10
Linux Cプログラミングを学ぶための書籍
C言語・C++・C#
-
11
右ビットシフト
C言語・C++・C#
-
12
C#,vb.netで業務用アプリ開発とかあると思うんですけど、皆さんどのようなアプリを作ってるのです
C言語・C++・C#
-
13
プログラマーです。このDB設計だと絶対後々面倒なことになるぞ...! って思った時ってどうしたらいい
C言語・C++・C#
-
14
c言語のリダイレクトによる円の描画について
C言語・C++・C#
-
15
c++でテンプレートのコードでわからないことがあります
C言語・C++・C#
-
16
次の日本語の意味を教えて下さい
C言語・C++・C#
-
17
C言語について。
C言語・C++・C#
-
18
インクリメント演算子のみを用いて、下に表示されるようにプログラムします 99 100 102 103
C言語・C++・C#
-
19
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
20
だれがとけるの?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
binファイルを解凍したいの...
-
公文書のxmlファイルの開き方が...
-
Latexで図番号だけを「図1.1」...
-
reaper音声ファイルについて
-
csvファイルについて教えて下さ...
-
WMAファイルのデータ構造について
-
#include <Windows.h>というヘ...
-
ZIP内の特定のファイルのみ抽出...
-
iPhoneでXMLファイルを開くには...
-
他のMDBのマクロを実行する方法
-
HTAのウィンドウを閉じるには・...
-
VB.netで DirListBoxを使いたい
-
ゲームフォルダの中に画像ファ...
-
JRのjsonファイルって使って大...
-
エクセルファイルが複数同時に...
-
○○○.zip.001というファイルが開...
-
jarファイルはzipファイルと同...
-
MFCのダイアログのリソースが更...
-
既に開いているエクセルを閉じ...
-
コマンドプロンプトで、指定し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
binファイルを解凍したいの...
-
コマンドプロンプトで作成日時...
-
アクセス 壊れた? 「ファイ...
-
.NETアプリを作ったときの .man...
-
#include <Windows.h>というヘ...
-
公文書のxmlファイルの開き方が...
-
Latexで図番号だけを「図1.1」...
-
jarファイル
-
Seasar2のdiconファイルの読み方
-
自分で作成した重要ファイルを...
-
C言語---ファイルに出力したデ...
-
コマンドプロンプトで、指定し...
-
ファイルが開かれているかどう...
-
exeファイルの中身を見る方法は...
-
リンクの張り付けかたを教えて...
-
VBAでのicsファイル変換
-
「ブルーファイル」と「グリー...
-
HTMLからのBATファイル実行
-
VBSが起動しない
-
CSSを1ページに1枚作るのって変...
おすすめ情報