|
|
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Есть такой метод Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. При вызове WriteRec происходит ошибка Invalid variant type. До вызова Log(AFieldName); дело не доходит. Причем ошибка плавающая. Проявляется только в Release конфигурации. Если пытаюсь добавлять логирование ошибка может переместиться в другой метод или вообще пропасть. Изначально ошибка была и в 32 битной версии и в 64. Сейчас только в 64. Я так понимаю, что причина или в повреждении стека или в том, что по входу в процедуру OleVariant переменные не заливаются нулями. Компилирую в 10.3.1. До этого код собирался в XE3. FastMM4 в FullDebugMode проблем не показывает. Вопроса два: 1. Не попадалась ли кому-нибудь подобная бага в qc? 2. Как его локализовать? Ассемблер отлаживать? С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 17:43 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_При вызове WriteRec происходит ошибка Invalid variant type. Пробовал явно задать своей константе тип, совместимый с OleVariant? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 18:04 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Пробовал явно задать своей константе тип, совместимый с OleVariant? Что-то радикально менять пока не хочу, потому что пропадание ошибки мне ничего не скажет. Хочется вначале диагностировать причину, а потом уже что-то делать. Даже такая модификация Код: pascal 1. 2. 3. 4. 5. 6. 7. ошибку устраняет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 18:18 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Inline используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 19:34 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Inline используется? Вот полный код Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 20:03 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Для начала, отключи инлайн и оптимизацию директивами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 20:09 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Для начала, отключи инлайн и оптимизацию директивами. Я Дмитрию уже говорил, что пропадание ошибки мне ничего не скажет. Потому что она пропадает от произвольной модификации кода. Хочется вначале диагностировать ошибку, а потом уже исправлять. Думал сделать дамп стека, но для x86 у меня получилось достать указатель на переменные в стеке Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. то для x64 не получается. В x64 по входу в процедуру выполняется код Код: pascal 1. 2. 3. И как достать исходный rsp я пока не придумал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 20:31 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Думал сделать дамп стека Про Ctrl-Alt-C в курсе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 20:46 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ У тебя что-то подобное было? Было всякое. Инлайн в дельфях очень... своеобразный, иху маму. _Vasilisk_ Я Дмитрию уже говорил, что пропадание ошибки мне ничего не скажет. Это, как минимум, укажет в каком направлении копать. Если после отключения инлайна глюк пропадёт, то можно будет в дебаге его принудительно включить, добиться воспроизведения и смотреть дизасм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2020, 20:46 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Я совсем потерялся. Создал воспроизводимый пример Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2020, 13:03 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Проблема здесь Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. С выделенной строки идет инициализация пустой TVarData. Но если в первом случае она тупо забивается нулями Код: pascal 1. 2. 3. 4. 5. 6. то во втором идет копирование 16 байт с адреса $008904c8. Вот, в зависимости от наличия overload там лежат разные данные. Что это за адрес я не пойму ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2020, 13:30 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Если с WriteRec убрать inline, то получаем заливку 72 байта локальных переменных нулями. Не совсем понимаю почему 72, если SizeOf(TVarData) * 4 = 64. Зачем еще 8 байт? Ну да ладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2020, 13:43 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Не воспроизводится, ни в 10.3.3, ни в 10.4.1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 00:19 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Не воспроизводится, ни в 10.3.3, ни в 10.4.1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 12:36 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
В 10.2.3 тоже не могу воспроизвести. Возможно, это что-то появилось в 10.3 / 10.3.1 и было исправлено в 10.3.3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 13:22 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, 10.3.3 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 10.4.1 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 13:24 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
TestProc: 10.2.3 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 13:25 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Всем спасибо. Значит мне просто не повезло. В 10.2.3 выделяется на 16 байт больше стека Код: pascal 1. 2. 3. 4. 5. А в 10.3.3 и новее идет адекватное обнуление Код: pascal 1. 2. 3. 4. 5. Откуда у меня movsd появился - великая тайна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 13:34 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Address Lookup по $4904C8 (= $008904c8 - $00400000) что-то покажет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 13:44 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
GunSmoker Address Lookup Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 14:16 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Это утилита из EurekaLog Tools Pack. А руками можно по .map файлу посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 14:32 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
GunSmoker А руками можно по .map файлу посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 16:59 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Тикет создал? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 17:24 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов Рустам Тикет создал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 17:49 |
|
||
|
Invalid variant type
|
|||
|---|---|---|---|
|
#18+
Не факт, что пофиксили. Впрочем, если на следующих версиях не воспроизводится, то особого смысла создавать нет (если снова не всплывёт). Разве что подарить пример для соответствующего автотеста. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2020, 18:27 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40003946&tid=2037969]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
184ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 548ms |

| 0 / 0 |
