digitalmars.D.learn - Traceinfo gone
- frame (32/32) Jul 24 2021 I recently discovered that my exceptions do not show a trace
- frame (38/39) Jul 24 2021 Meanwhile I can, it seems a linking problem or I'm doing
- Adam D Ruppe (3/6) Jul 25 2021 It needs to load the .pdb file at runtime, so make sure it stays
I recently discovered that my exceptions do not show a trace anymore. How can this happen? ```d int main() { try { throw new Exception("test"); } catch(Throwable e) { writefln("trace: %s", e.info); } // ... } ``` I'm expecting something like this: ``` trace: 0x00402326 0x0040E337 0x0040E2B1 0x0040E14C 0x0040A1D2 0x0040236B 0x76466359 in BaseThreadInitThunk 0x77CA7B74 in RtlGetAppContainerNamedObjectPath 0x77CA7B44 in RtlGetAppContainerNamedObjectPath ``` but it just prints: "trace:" and continues normally (does not terminate). The e.info contains a core.sys.windows.stacktrace.StackTrace but it seems empty. I cannot reproduce it with a standalone example app - everything works as expected there. But not in my application. Anyone ever experienced this?
Jul 24 2021
On Saturday, 24 July 2021 at 08:41:20 UTC, frame wrote:I cannot reproduce it with a standalone example appMeanwhile I can, it seems a linking problem or I'm doing something wrong? Please consider: ```d // dmd -m64 -L/DLL -version=lib test.d -of=common.dll // dmd -m64 test.d // test.d version (lib) { import core.sys.windows.dll; import std.stdio; mixin SimpleDllMain; export extern (C) void test() { writeln("test() called"); } } else { import std.stdio; pragma(lib, "common.lib"); extern (C) void test(); void main() { // No trace info anymore if extern function is called // test(); try { throw new Exception("test"); } catch (Throwable e) { writeln("trace: ", e.info); writeln("whatever"); } } } ```
Jul 24 2021
On Saturday, 24 July 2021 at 08:41:20 UTC, frame wrote:I recently discovered that my exceptions do not show a trace anymore. How can this happen?It needs to load the .pdb file at runtime, so make sure it stays next to your exe.
Jul 25 2021
On Sunday, 25 July 2021 at 10:26:34 UTC, Adam D Ruppe wrote:On Saturday, 24 July 2021 at 08:41:20 UTC, frame wrote:No, I think you misunderstand the issue. I don't care about the symbolic debug information. The issue is: w/o calling test() there are stack lines available but when I compile it with the test() call, no stack lines are available?I recently discovered that my exceptions do not show a trace anymore. How can this happen?It needs to load the .pdb file at runtime, so make sure it stays next to your exe.
Jul 25 2021
On Sunday, 25 July 2021 at 11:17:26 UTC, frame wrote:The issue is: w/o calling test() there are stack lines available but when I compile it with the test() call, no stack lines are available?So if my usage is valid I would file a bug report - but maybe my setup is just broken. Could some Windows user please verify this issue with static linked? ```d try { throw new Exception("test"); } catch (Throwable e) { const(char)[] lines; foreach (n; e.info) lines ~= n; assert(lines.length == 0); // true if test() call was compiled in } ```
Jul 26 2021
On Tuesday, 27 July 2021 at 05:14:22 UTC, frame wrote:On Sunday, 25 July 2021 at 11:17:26 UTC, frame wrote:No further response to this, so I made a ticket: https://issues.dlang.org/show_bug.cgi?id=22181
Aug 05 2021